Files
tessera-ctl/apps/web/src/messages/en.json
T
schalli aadee98bd3 docs: alle Anleitungen gegen den Code geprueft und nachgearbeitet
Anwender-, Administrations-, Betriebs- und Entwicklungsanleitung gegen
Code und Oberflaechentexte abgeglichen; falsche und veraltete Stellen
korrigiert, fehlende Funktionen ergaenzt. Willkommensmail: Hinweis
nennt jetzt sechs statt vier Felder.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 17:44:04 +02:00

2937 lines
134 KiB
JSON
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.
{
"common": {
"appName": "Tessera",
"loading": "Loading...",
"save": "Save",
"cancel": "Cancel",
"menu": "Menu",
"confirm": "Confirm",
"delete": "Delete",
"edit": "Edit",
"create": "Create",
"close": "Close",
"yes": "Yes",
"no": "No",
"active": "Active",
"inactive": "Inactive",
"actions": "Actions",
"accessDenied": "Access denied",
"brand": {
"logoAlt": "Tessera logo"
}
},
"auth": {
"login": "Sign In",
"username": "Username",
"password": "Password",
"rememberMe": "Remember me",
"submit": "Sign In",
"forgotPassword": "Forgot password?",
"error": {
"invalidCredentials": "Invalid username or password",
"networkError": "Connection error. Please try again."
},
"branding": {
"tagline": "Modular workflow platform for your organization",
"claim": "Your tools in one place."
},
"desktopDownload": {
"windows": "Download desktop app (Windows)",
"linux": "Download desktop app (Linux)",
"linuxShort": "Linux version",
"version": "Version {version}"
},
"resetPassword": {
"title": "Reset Password",
"email": "Email address",
"submit": "Send Reset Link",
"success": "If an account with this email exists, a reset link has been sent.",
"backToLogin": "Back to Sign In",
"newPasswordTitle": "Set New Password",
"newPassword": "New Password",
"confirmPassword": "Confirm Password",
"submitReset": "Reset Password",
"resetSuccess": "Your password has been reset successfully.",
"redirecting": "You will be redirected to the sign in page in a few seconds...",
"tokenExpired": "This reset link has expired. Please request a new one.",
"tokenUsed": "This reset link has already been used. Please request a new one.",
"tokenInvalid": "This reset link is invalid.",
"passwordMismatch": "Passwords do not match."
},
"changePassword": {
"title": "Change Password",
"currentPassword": "Current Password",
"newPassword": "New Password",
"confirmPassword": "Confirm New Password",
"submit": "Change Password",
"success": "Your password has been changed successfully.",
"forceChangeNotice": "For security reasons, you must change your password before continuing.",
"wrongCurrentPassword": "The current password is incorrect.",
"networkError": "Connection error. Please try again.",
"passwordMismatch": "Passwords do not match."
},
"loginSubtitle": "Sign in with your user account."
},
"header": {
"search": "Search...",
"userMenu": "User menu",
"breadcrumb": {
"home": "Home"
},
"settings": "Settings",
"settingsAdmin": "Settings/Administration",
"logout": "Sign Out",
"admin": {
"label": "Administration",
"users": "Users",
"tenants": "Tenants",
"modules": "Modules",
"customModules": "Custom modules",
"ldap": "LDAP",
"smtp": "SMTP",
"groups": "Groups",
"welcomeMail": "Welcome email"
},
"role": {
"SUPER_ADMIN": "Super Admin",
"ADMIN": "Admin",
"USER": "User"
}
},
"sidebar": {
"dashboard": "Dashboard",
"marketplace": "Marketplace",
"settings": "Settings",
"collapse": "Collapse",
"expand": "Expand",
"userPlaceholder": "User",
"search": "Search modules...",
"noResults": "No modules found",
"categories": {
"label": "Categories",
"empty": "No modules"
},
"admin": "Administration",
"users": "Users",
"tenants": "Tenants",
"ldap": "LDAP",
"modules": "Modules",
"channel": {
"beta": "Beta",
"live": "Live",
"dev": "Development"
},
"whatsNew": "What's new"
},
"dashboard": {
"title": "Dashboard",
"empty": "No active widgets",
"addWidget": "Add widget",
"background": {
"button": "Background",
"title": "Dashboard background",
"hint": "Applies only to you – on every device you sign in on.",
"builtIn": "Built-in",
"none": "None",
"ownImages": "Your images",
"upload": "Upload image",
"noImages": "No images yet – upload one or use images from the picture frame.",
"uploadError": "The image could not be uploaded.",
"presets": {
"mist": "Mist",
"bloom": "Bloom",
"dunes": "Dunes",
"mosaic": "Mosaic",
"pebble": "Pebble"
}
},
"greeting": {
"morning": "Good morning",
"day": "Good afternoon",
"evening": "Good evening",
"morningNamed": "Good morning, {name}",
"dayNamed": "Good afternoon, {name}",
"eveningNamed": "Good evening, {name}"
}
},
"settings": {
"link": "Settings",
"navLabel": "Settings",
"backToDashboard": "Back to Dashboard",
"categoryDashboard": "Dashboard",
"categoryWidgets": "Widgets",
"widgets": {
"empty": "No widgets have been placed on the dashboard yet."
},
"categoryCalendar": "Calendar",
"categoryGeneral": "General",
"categoryAccount": "Account",
"categoryDesktopApp": "Desktop App",
"categoryCustomModules": "Custom modules",
"categorySmtp": "SMTP",
"account": {
"title": "Account",
"avatarLabel": "Profile Picture",
"avatarHelp": "Allowed formats: PNG, JPEG, WebP. Maximum size: 2 MB.",
"uploadCta": "Upload picture",
"uploadSuccess": "Profile picture updated successfully.",
"uploadError": "Upload failed. Please check the file format and size.",
"ldapManagedNotice": "Your password is managed via the directory (LDAP) and cannot be changed here.",
"passwordSectionTitle": "Change Password",
"accentColorLabel": "Accent Color",
"accentColorHelp": "Customizes the primary color of the interface.",
"accentColorReset": "Reset",
"accentColorSave": "Save color",
"accentColorSuccess": "Accent color saved successfully.",
"accentColorError": "Failed to save color.",
"accentColorHex": "Hex code",
"accentColorHexInvalid": "Invalid color value. Please enter six hexadecimal characters, e.g. #ffed00.",
"deleteAvatarCta": "Delete picture",
"deleteAvatarSuccess": "Profile picture deleted successfully.",
"deleteAvatarError": "Failed to delete picture."
},
"desktop": {
"title": "Desktop App",
"intro": "The desktop app opens Tessera in its own window – no browser, with an icon in the notification area of the taskbar.",
"firstStart": "On first start the app asks for the address of your Tessera server; it is the address you also use to open Tessera in the browser.",
"tray": "If you close the window, Tessera keeps running in the notification area; use the icon there to reopen the window, enable automatic start, or quit the app.",
"update": "When a newer version is available the app notifies you and brings you to this page.",
"versionLabel": "Current version: {version}",
"channelBeta": "Beta build, commit {commit}",
"downloadWindows": "Download for Windows",
"downloadLinux": "Download for Linux",
"fileInfo": "{name} · {size}",
"unavailable": "No desktop packages are available on this server yet.",
"connectedTo": "Connected to: {origin}",
"changeHint": "To change it, use the Tessera icon in the notification area → “Change server address…”"
},
"sourceDeleteConfirm": "Are you sure you want to delete this calendar source?",
"sourceDeleteCta": "Delete source",
"providerDeleteConfirm": "Are you sure you want to delete this search provider?",
"providerDeleteCta": "Delete provider",
"cancel": "Cancel",
"smtp": {
"title": "Email delivery",
"host": "Host",
"port": "Port",
"encryption": "Encryption",
"username": "Username",
"password": "Password",
"fromAddress": "Sender Address (From)",
"fromAddressHelp": "The email address shown as the sender.",
"save": "Save Settings",
"test": "Test Connection",
"showPassword": "Show password",
"hidePassword": "Hide password",
"testToLabel": "Send test email to",
"testToPlaceholder": "recipient@example.com",
"testToHelp": "Optional — sends a real test email to this address.",
"testTesting": "Testing connection...",
"testSuccess": "Connection successful",
"testFailed": "Connection failed",
"bugReportRecipient": "Bug reports to",
"bugReportRecipientHelp": "Optional – mailbox that receives the reports users send via the \"Report a problem\" button, including the screenshot. Leave empty if the button should not send e-mails."
},
"customModules": {
"title": "Custom modules",
"description": "Add websites you use often as your own entries in your sidebar. Only you can see these entries. A click shows the page right inside Tessera.",
"create": "Add custom module",
"noModules": "No custom modules yet",
"noModulesBody": "Add your first module to show a website in your sidebar."
}
},
"widgets": {
"emptyHeading": "No active widgets",
"emptyBody": "Click edit to add widgets to your dashboard.",
"addWidget": "Add widget",
"catalogTitle": "Add widget",
"catalogClose": "Close dialog",
"deleteTooltip": "Remove widget",
"hideTitle": "Hide title",
"dragHint": "Drag the tile to move it",
"editMode": "Edit dashboard",
"saveChanges": "Save changes",
"layoutLoadError": "Could not load dashboard. Please reload the page.",
"widgetSaveError": "Could not save changes. Please try again.",
"unavailable": "This tile is not available — the module it belongs to is not enabled for you.",
"tabs": {
"navLabel": "Dashboard tabs",
"add": "Add dashboard",
"switching": "Switching dashboard …",
"renameButtonLabel": "Rename dashboard",
"renameInputLabel": "Dashboard name",
"deleteButtonLabel": "Delete dashboard",
"deleteDialogTitle": "Delete dashboard",
"deleteDialogBody": "Do you really want to delete the dashboard \"{name}\"? Its tiles and layout will be deleted as well.",
"dragHint": "Drag a tab to a different position with your mouse. The first tab loads when you open the dashboard."
},
"clock": {
"name": "Clock",
"description": "Shows the current time",
"dateHint": "Show date",
"fontSizeLabel": "Font size of the time (pt)",
"fontSizeAuto": "automatic",
"fontSizeHint": "Leave empty and the time follows the size of the tile. A value between 8 and 200 fixes the font size regardless of the tile size.",
"fontSizeInvalid": "Please enter a number between 8 and 200 or leave the field empty."
},
"search": {
"name": "Search",
"description": "Quick web search",
"placeholder": "Search...",
"searchButton": "Search",
"providers": "Search Providers",
"addProvider": "Add Custom Provider",
"addProviderButton": "Add Provider"
},
"calendar": {
"name": "Calendar",
"description": "Upcoming events",
"loading": "Loading...",
"emptyNoSources": "No calendar sources configured",
"emptyNoEvents": "No upcoming events",
"nothingSelected": "Nothing selected to display",
"monthPrev": "Previous month",
"monthNext": "Next month",
"monthToday": "Back to the current month",
"upcomingTitle": "Upcoming events",
"tooltipMore": "More events available",
"allDay": "all day",
"dayEventsOne": "{date}: 1 event",
"dayEventsMany": "{date}: {count} events",
"configShowMonth": "Show month view",
"configMaxEvents": "Number of events",
"configMaxEventsNone": "Hide",
"configMaxEventsOne": "1 event",
"configMaxEventsMany": "{count} events",
"configLookahead": "Time range",
"configLookaheadOption": "Next {days} days",
"configSourcesHint": "Manage calendar sources under",
"configSourcesLink": "Settings → Dashboard → Calendar",
"connectionSuccess": "Connection successful",
"connectionError": "Connection failed. Please check the URL and credentials.",
"syncErrorLabel": "Sync error",
"connectionFailedLabel": "Connection failed",
"addSource": "Add source",
"sourceEmpty": "No calendar sources configured. Add a source to display events.",
"formFieldName": "Name",
"formFieldType": "Type",
"formFieldExchangeMode": "Exchange connection",
"formFieldDomain": "Domain",
"formFieldDomainHint": "Optional – only needed if your Exchange server expects DOMAIN\\user for sign-in.",
"formFieldUrl": "Address (URL)",
"formFieldUrlPlaceholderEws": "https://mail.firma.de/EWS/Exchange.asmx",
"formFieldUrlPlaceholderGraph": "https://graph.microsoft.com/v1.0",
"formFieldUrlPlaceholderCaldav": "https://caldav.firma.de/dav/",
"formFieldUrlPlaceholderIcs": "https://…/kalender.ics",
"formFieldUrlHintEws": "Enter the full EWS address including /EWS/Exchange.asmx – the server name alone is not enough.",
"formFieldUsername": "Username",
"formFieldPassword": "Password",
"formFieldColor": "Color",
"formSave": "Save",
"formSaving": "Saving …",
"formTestConnection": "Test connection",
"formTesting": "Checking connection …",
"formTestSuccess": "Connection successful.",
"formTestFailed": "Connection failed. Please check the address and credentials.",
"formTestUnreachable": "The calendar server is not reachable. Please check the address and whether the server can be reached from the Tessera server.",
"formCancel": "Cancel",
"formUrlErrorHttps": "The address must start with https://.",
"formUrlErrorInvalid": "Please enter a valid address.",
"saveSuccess": "Calendar source saved.",
"saveError": "The calendar source could not be saved.",
"deleteDialogCancel": "Cancel deletion",
"deleteDialogLabel": "Confirm deletion",
"today": "Today",
"tomorrow": "Tomorrow"
},
"note": {
"name": "Notes",
"description": "Free-text notes with Markdown",
"defaultTitle": "Note",
"autosaveError": "Save failed",
"editMode": "Edit mode",
"viewMode": "Preview mode",
"titleLabel": "Title"
},
"calculator": {
"name": "Calculator",
"description": "Basic arithmetic with keyboard support",
"displayLabel": "Display",
"memoryLabel": "Memory functions",
"backspaceLabel": "Backspace"
},
"favorites": {
"name": "Favorites",
"description": "Quick-access links",
"loading": "Loading favorites...",
"empty": "No favorites yet.",
"addTitle": "Title",
"addUrl": "URL",
"addButton": "Add",
"listView": "List",
"gridView": "Grid",
"editButton": "Edit favorite",
"deleteButton": "Delete favorite",
"moveUpButton": "Move up",
"moveDownButton": "Move down",
"saveButton": "Save",
"cancelButton": "Cancel",
"error": "Error loading favorites",
"titleLabel": "Title",
"titlePlaceholder": "Title (optional)",
"viewModeLabel": "Switch view",
"iconUrlPlaceholder": "Logo URL (optional)",
"iconUploadLabel": "Upload custom icon",
"iconUploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG, at most 512 KB. An uploaded icon takes precedence over the logo URL; a newly entered logo URL replaces it, though.",
"iconUploadedHint": "A custom icon has been uploaded for this favorite.",
"iconRemoveButton": "Remove uploaded icon",
"iconTooLarge": "The file is too large – at most 512 KB is allowed.",
"iconInvalidType": "Only PNG, JPEG, GIF, WebP, ICO or SVG images are allowed.",
"iconUploadFailed": "The icon could not be uploaded."
},
"stopwatch": {
"name": "Stopwatch",
"description": "Time measurement with lap times",
"start": "Start",
"stop": "Stop",
"reset": "Reset",
"lap": "Lap"
},
"pictureFrame": {
"name": "Picture frame",
"description": "Upload or link images as a slideshow",
"empty": "No images yet — add some in the settings",
"unavailable": "Image not available",
"open": "Show image enlarged",
"close": "Close enlarged view",
"fitLabel": "Image fit",
"fitContain": "Fully visible",
"fitCover": "Fill the frame",
"intervalLabel": "Change interval",
"intervalOff": "No change",
"intervalSeconds": "{n} seconds",
"intervalMinutes": "{n, plural, one {# minute} other {# minutes}}",
"intervalHours": "{n, plural, one {# hour} other {# hours}}",
"orderLabel": "Image order",
"orderSequence": "In order",
"orderRandom": "Random",
"imagesLabel": "Images",
"imageCountOne": "1 image",
"imageCountMany": "{n} images",
"captionPlaceholder": "Caption (optional)",
"uploadButton": "Upload image",
"uploadHint": "PNG, JPEG, GIF or WebP, at most 5 MB, up to 30 images",
"urlPlaceholder": "https://…",
"urlAddButton": "Add web address",
"urlInvalid": "Please enter a complete https address.",
"removeButton": "Remove image",
"moveUpButton": "Move up",
"moveDownButton": "Move down",
"limitReached": "The maximum of 30 images has been reached.",
"uploadFailed": "The image could not be uploaded."
},
"xframe": {
"name": "XFrame",
"description": "Embed a web page",
"empty": "No address set — configure it in the settings",
"openInNewTab": "Open in a new tab",
"urlLabel": "Address (https)",
"urlPlaceholder": "https://…",
"urlInvalid": "Please enter a complete https address.",
"titleLabel": "Title",
"titlePlaceholder": "Title (optional)",
"reloadLabel": "Reload automatically",
"reloadOff": "Never",
"reloadMinute": "Every minute",
"reloadMinutes": "Every {n} minutes",
"reloadHour": "Every hour",
"embedHint": "Some web pages refuse to be embedded — the frame then stays empty. “Open in a new tab” still takes you to the page.",
"cropEnable": "Show only a section of the page",
"cropHint": "The section is a position on the page. If the page changes its layout, the section may shift and has to be set again.",
"cropPreviewHint": "Preview of the page at 1280 pixels wide. Drag the frame to the desired spot; use the corners to change its size. Scroll down to see more of the page.",
"cropPreviewEmpty": "The preview appears once an address is set.",
"cropRectangle": "Section – drag to move, corners to resize",
"cropX": "Left",
"cropY": "Top",
"cropW": "Width",
"cropH": "Height",
"cropUnitHint": "Values in page pixels at 1280 pixels wide",
"zoomLabel": "Zoom of the full page",
"zoomOption": "{n} %",
"readOnly": "View only – block clicks and scrolling inside the frame"
},
"proxmox": {
"name": "Proxmox",
"description": "Health of your Proxmox servers at a glance",
"allOk": "All good",
"empty": "No Proxmox server added yet.",
"guests": "{running}/{total} {total, plural, one {guest running} other {guests running}}",
"noGuests": "no guests",
"load": "Load {percent}",
"backupAgo": "Backup {age}",
"mailIn": "{count} incoming",
"selectionGone": "The selected servers no longer exist. Choose others in edit mode.",
"titleLabel": "Title",
"titlePlaceholder": "Title (optional)",
"serversLabel": "Servers shown",
"serversHint": "With nothing selected, the tile shows all servers.",
"chooseServers": "Choose servers",
"autostartStopped": "{count} stopped despite autostart"
},
"reminder": {
"name": "Reminders",
"description": "Appointments and tasks with a notification at the time you choose",
"add": "New reminder",
"empty": "No reminders. Create a new reminder.",
"formTitle": "New reminder",
"dateLabel": "Date",
"timeLabel": "Time",
"titleLabel": "Title",
"descriptionLabel": "Description (optional)",
"save": "Save",
"cancel": "Cancel",
"titleRequired": "Please enter a title.",
"pastError": "The chosen time is in the past.",
"saveError": "The reminder could not be saved.",
"loadError": "Reminders could not be loaded.",
"limitReached": "You can have at most 100 reminders.",
"due": "Due",
"done": "Done",
"snooze": "Remind me later",
"snooze10m": "In 10 minutes",
"snooze1h": "In 1 hour",
"snoozeTomorrow": "Tomorrow at {time}",
"snoozeToday": "Today at {time}",
"edit": "Edit reminder",
"editTitle": "Edit reminder",
"delete": "Delete reminder",
"deleteConfirm": "Delete?",
"yes": "Yes",
"no": "No",
"alreadyDue": "The reminder is now due and can no longer be edited.",
"notDue": "The reminder is not due yet.",
"permissionDenied": "Your browser blocks notifications. Due reminders will then only appear here in the tile.",
"emailLabel": "Also remind me by e-mail",
"emailNoSmtp": "E-mail reminders are not possible because no e-mail delivery is set up. Please contact your administrator.",
"emailNoAddress": "Your account has no e-mail address on file.",
"emailOn": "Also by e-mail",
"notificationTitle": "Reminder: {title}"
},
"editShort": "Edit",
"done": "Done",
"reloadRequired": "This dashboard was saved by a newer version of Tessera. Please reload the page to edit it.",
"toolbarLabel": "Dashboard actions",
"emptyState": {
"title": "Your dashboard is still empty",
"body": "Build your start page from tiles. For example:"
},
"nextcloudStatus": {
"name": "Nextcloud status",
"description": "Traffic-light overview of your Nextcloud clouds"
}
},
"admin": {
"users": {
"title": "Users",
"create": "Create User",
"edit": "Edit User",
"delete": "Delete User",
"deleteConfirm": "Are you sure you want to delete this user?",
"name": "Name",
"username": "Username",
"email": "Email",
"displayName": "Display Name",
"role": "Role",
"status": "Status",
"lastLogin": "Last sign-in",
"neverLoggedIn": "Never",
"actions": "Actions",
"password": "Password",
"noUsers": "No users found",
"grants": {
"detailsButton": "Details",
"modalTitle": "{username} — Access",
"groupsSection": "Group Memberships",
"noGroups": "This user is not a member of any group.",
"accessSection": "Module Access",
"moduleColumn": "Module",
"viaGroupsColumn": "Via Group(s)",
"directColumn": "Direct",
"noInheritance": "–",
"noActiveModules": "No modules are activated.",
"directCheckboxLabel": "{granted, select, true {Grant} other {Revoke}} {module} directly for {user}",
"directLevelLabel": "Level of the direct grant of {module} for {user}",
"manageMarker": "Manage",
"saveError": "Could not save grant. Please try again."
},
"errors": {
"serverRejected": "The server rejected the action: {detail}",
"generic": "The action could not be completed. Please try again.",
"network": "The server is not reachable. Please try again.",
"loadFailed": "The user list could not be loaded. Please reload the page."
},
"welcomeMail": {
"button": "Send welcome email",
"resend": "Send again",
"sentAt": "Welcome email sent on {date}",
"noEmail": "No email address on file – please add one first.",
"noSmtp": "No SMTP server has been set up yet (Administrator → SMTP).",
"inactive": "The account is deactivated.",
"dialogTitle": "Send welcome email",
"dialogText": "Tessera will send a welcome email with the address, username and first sign-in instructions to:",
"dialogResend": "A welcome email was already sent on {date}. It will be sent again.",
"send": "Send",
"sending": "Sending …",
"success": "The welcome email to {email} has been sent."
}
},
"tenants": {
"title": "Tenant Management",
"create": "Create Tenant",
"edit": "Edit Tenant",
"name": "Name",
"slug": "Slug",
"status": "Status",
"userCount": "Users",
"actions": "Actions",
"noTenants": "No tenants found",
"deleteConfirm": "Are you sure you want to delete this tenant?",
"cannotDeleteActive": "Cannot delete tenants with active users"
},
"ldap": {
"title": "Directory (LDAP)",
"connectionTitle": "Connection settings",
"serverUrl": "Server URL",
"baseDn": "Base DN",
"baseDnHint": "One DN per line. The base DN(s) define the sync scope.",
"bindDn": "Bind DN",
"bindPassword": "Bind password",
"searchFilter": "Search filter",
"tlsSkip": {
"label": "Skip TLS certificate verification (insecure)",
"hint": "Only needed for ldaps:// when the AD certificate is signed by an internal/self-signed CA (error: 'unable to verify the first certificate'). Disables certificate verification - use only on trusted networks."
},
"save": "Save",
"testConnection": "Test connection",
"testSuccess": "Connection successful",
"testFailed": "Connection failed",
"enable": "Enabled",
"disable": "Disabled",
"fieldMapping": {
"title": "Field mapping",
"add": "Add mapping",
"ldapField": "LDAP field",
"tesseraField": "Tessera field",
"default": "Default",
"defaultIcon": "Default mapping",
"remove": "Remove"
},
"sync": {
"title": "Synchronization",
"interval": "Sync interval",
"intervalDisabled": "disabled",
"lastSync": "Last sync",
"neverSynced": "Never synced",
"trigger": "Sync now",
"syncing": "Syncing...",
"result": "Created: {created}, updated: {updated}, deactivated: {deactivated}",
"resultGroupMemberships": "Group memberships: {groupMembershipsAdded} added, {groupMembershipsRemoved} removed",
"resultGroups": "AD groups: {groupsAdopted} newly adopted, {groupsRenamed} renamed, {groupsDeleted} deleted",
"defaultMarkerMoved": "Default-group marker had to be reassigned ({defaultMarkerMoved}×).",
"emailConflictsHeading": "These accounts were created without an email address because the address already belongs to another account. Login and access work fine, only email notifications will not reach them.",
"emailConflictLine": "{account} — address already taken by another account: {email}",
"skippedNoLoginHeading": "Skipped for lacking a login name — normal for contacts and distribution lists in the directory.",
"entryFailuresHeading": "An unexpected error occurred for these entries. The technical details are in the server log.",
"requestError": "The synchronization could not be run."
},
"groupFilter": {
"title": "Import filter (groups/OUs)",
"description": "Optional additional restriction to selected AD groups or organizational units. With no selection, all users under the base DN(s) are synced.",
"discover": "Discover groups/OUs",
"typeOu": "OU",
"typeGroup": "Group",
"noneFound": "No groups or OUs found.",
"searchPlaceholder": "Search groups/OUs...",
"noMatches": "No matches for this search.",
"manualDn": "Add DN manually",
"addDn": "Add",
"selected": "Selected",
"emptyMeansAll": "No selection - all users under the base DN(s) are synced.",
"save": "Save filter"
},
"groupImport": {
"title": "Import AD groups",
"description": "Selected AD groups are created as Tessera groups and kept in sync with every subsequent run — name, membership and deletion in AD carry over automatically.",
"discover": "Search AD groups",
"searchPlaceholder": "Search AD groups...",
"noneFound": "No AD groups found.",
"noMatches": "No matches for this search.",
"alreadyImported": "Already imported",
"importSelected": "Import selected",
"resultSummary": "{imported} imported, {skipped} skipped{errors, plural, =0 {} other {, # errors}}",
"membershipHint": "Memberships are filled in automatically by the next sync run (manual or scheduled).",
"nameCollisionError": "Group \"{name}\" could not be imported: the name is already taken. Rename the existing local group or give it an internal name.",
"discoverError": "AD groups could not be retrieved. Check the LDAP connection and try again.",
"importError": "The import could not be executed. No group was created."
},
"userExclude": {
"title": "Exclude users (denylist)",
"description": "Individual usernames that are never imported - e.g. service accounts like administrator, krbtgt, guest or ldap$. Applies on top of the group/OU filter.",
"username": "Username",
"add": "Add",
"excluded": "Excluded",
"empty": "None excluded - every discovered user is imported.",
"save": "Save exclude list"
},
"userSearch": {
"title": "Search & import individual users",
"description": "Search for individual AD users and import them selectively. Users that already exist are skipped - no duplicate import, even when their department is synced later.",
"placeholder": "Name, username or email...",
"search": "Search",
"noResults": "No users found.",
"alreadyImported": "Already imported",
"import": "Import",
"importSelected": "Import selected",
"created": "imported",
"skipped": "skipped",
"errors": "errors"
}
},
"groups": {
"title": "Groups",
"create": "Create Group",
"edit": "Edit Group",
"delete": "Delete Group",
"noGroups": "No groups yet",
"noGroupsBody": "Create your first group to grant module access selectively.",
"name": "Name",
"ldapBinding": "AD Binding",
"boundBadge": "AD-bound",
"manualBadge": "Manual",
"defaultGroup": "Default Group",
"setDefault": "Set as default group",
"isDefault": "Default group",
"memberCount": "Members",
"actions": "Actions",
"membersButton": "Members",
"saveError": "Could not save group. Please try again.",
"saveErrorNameTaken": "This name is already taken.",
"deleteError": "Could not delete group. Please try again.",
"nameLockedHint": "Taken from the AD group. Updated automatically on the next sync.",
"adDnLabel": "AD DN: {ldapDn}",
"internalName": "Internal Name",
"internalNameHint": "Never changed by the sync. If left empty, the interface shows the AD name instead.",
"createLdapHint": "AD groups are imported in the LDAP area, not created here.",
"goToLdap": "Go to LDAP area",
"members": {
"title": "Members",
"remove": "Remove member",
"ldapManaged": "Managed via AD sync",
"sourceManual": "Manual",
"sourceLdap": "LDAP",
"addTitle": "Add member",
"searchPlaceholder": "Search users...",
"noMembers": "No members yet.",
"addError": "Could not add member. Please try again."
},
"deleteConfirm": {
"title": "Delete Group",
"body": "This group has {memberCount, plural, one {# member} other {# members}} and {grantCount, plural, one {# module grant} other {# module grants}}. Affected users will lose access unless they have it another way. This action cannot be undone."
},
"grants": {
"matrixCheckboxLabel": "{granted, select, true {Grant} other {Revoke}} {module} for group {group}",
"levelUse": "Use",
"levelManage": "Manage",
"levelSelectLabel": "Level for {module} in group {group}"
}
},
"customModules": {
"title": "Custom modules for everyone",
"description": "Add other websites as entries in the sidebar. All users see these shared entries under the chosen category, and a click shows the page right inside Tessera. Personal entries only you can see are added under “Settings → Custom modules”.",
"create": "Add shared entry",
"noModules": "No shared entries yet",
"noModulesBody": "Add your first shared entry to show a website in the sidebar for all users."
},
"welcomeMail": {
"title": "Welcome email",
"description": "Choose the words Tessera uses to greet new users. The template applies to all users and is used for every welcome email sent from user management.",
"loading": "Loading template …",
"fixed": {
"title": "What you can change – and what always stays",
"body": "You decide the subject, heading, introduction, closing text and the sign-in hint – separately for directory accounts and for local accounts. Everything technically needed to sign in is always added automatically and cannot be changed: the header with logo, the box with address and username, the “Set password” button with its link and validity note for local accounts, the “Go to Tessera” button and the footer. This way a custom template cannot break sign-in."
},
"statusDefault": "The default texts are currently in use.",
"statusCustom": "Custom template active – last changed on {date}.",
"statusCustomBy": "Custom template active – last changed on {date} by {user}.",
"unsaved": "Unsaved changes",
"fields": {
"subject": "Subject",
"subjectHelp": "One line, required.",
"heading": "Heading",
"headingHelp": "Large line at the top of the email, required.",
"intro": "Introduction",
"introHelp": "Shown below the heading. An empty line starts a new paragraph.",
"loginHintDirectory": "Sign-in hint for directory accounts",
"loginHintDirectoryHelp": "Shown below the box with the sign-in details when the user comes from the directory (Active Directory/LDAP) and signs in with their usual Windows password. Required.",
"loginHintLocal": "Sign-in hint for local accounts",
"loginHintLocalHelp": "Shown for local accounts right before the “Set password” button. Tessera always adds the button and the validity note below it. Required.",
"closing": "Closing text",
"closingHelp": "Shown at the end of the email, e.g. a tip and a sign-off. May be left empty."
},
"counter": "{count} / {max}",
"save": "Save",
"saving": "Saving …",
"saved": "The template has been saved. New welcome emails will use these texts from now on.",
"test": "Send test email to me",
"testSending": "Sending …",
"testSent": "The test email was sent to {email}.",
"testHelp": "The test email goes to your own email address and shows the current form content, even if it has not been saved yet. It does not contain a real link for setting a password.",
"reset": "Reset to default",
"resetDone": "The default texts have been restored.",
"resetConfirm": {
"title": "Reset to default?",
"body": "Your custom template will be deleted and the default texts apply again. This cannot be undone.",
"confirm": "Reset",
"cancel": "Cancel"
},
"errors": {
"load": "The template could not be loaded. Please reload the page.",
"save": "The template could not be saved.",
"reset": "The template could not be reset.",
"test": "The test email could not be sent.",
"required": "Please fill in this field.",
"tooLong": "At most {max} characters.",
"unknownPlaceholder": "Unknown placeholder {token}",
"unknownPlaceholders": "Unknown placeholders {tokens}"
},
"placeholders": {
"title": "Placeholders",
"intro": "Tessera replaces placeholders with the details of each user when sending. They work in all six fields. Clicking a placeholder inserts it at the cursor position of the field you used last.",
"colPlaceholder": "Placeholder",
"colMeaning": "Meaning",
"colExample": "Example",
"insert": "Insert {token}",
"insertHint": "Click to insert",
"rules": "Tessera does not know any other placeholders – they are rejected when saving. The texts are plain text: formatting or HTML is not applied but shown exactly as you type it.",
"items": {
"name": {
"meaning": "Display name of the user, otherwise the username",
"example": "Max Mustermann"
},
"vorname": {
"meaning": "First word of the display name, otherwise the username",
"example": "Max"
},
"benutzername": {
"meaning": "Username for signing in",
"example": "max.mustermann"
},
"email": {
"meaning": "Email address of the user",
"example": "max.mustermann@example.com"
},
"adresse": {
"meaning": "Address of Tessera",
"example": "https://tessera.example.com"
},
"firma": {
"meaning": "Name of your organization",
"example": "Example Ltd"
}
}
},
"preview": {
"title": "Preview",
"accountLabel": "Preview for account type",
"directory": "Directory account",
"local": "Local account",
"subject": "Subject:",
"frameTitle": "Welcome email preview",
"error": "The preview could not be created.",
"blocked": "The preview updates as soon as all fields are valid.",
"sampleHint": "The preview uses sample values (Max Mustermann) and the name of your organization. The “Set password” link is only an example in the preview."
}
}
},
"adminModules": {
"title": "Modules",
"description": "Activate or deactivate modules",
"activate": "Activate",
"deactivate": "Deactivate",
"activated": "Activated",
"deactivated": "Deactivated",
"system": "System",
"version": "Version",
"noModules": "No modules available",
"activateSuccess": "Module activated successfully",
"deactivateSuccess": "Module deactivated successfully",
"error": "Error managing module",
"grantsLink": "Grants Matrix",
"categoriesLink": "Categories",
"grants": {
"title": "Permissions",
"searchPlaceholder": "Search modules or groups...",
"emptyModules": "No modules are activated yet. Activate a module under Modules first.",
"emptyModulesLink": "Go to Modules",
"levelExplanation": "“Use”: open the module and work with it. “Manage”: additionally change the settings of this module. Only administrators may grant access and activate modules. If someone has access through several routes, the higher level applies.",
"adminNote": "Administrators always have access to all active modules and may change their settings — this matrix only affects users without administrator rights.",
"saveError": "Could not save grant. Please try again.",
"noSearchResults": "No match for \"{search}\" — neither in the modules nor in the groups."
},
"categories": {
"title": "Categories",
"description": "Decide how modules are grouped and sorted in the sidebar and in the marketplace. The setting applies to all users.",
"backToModules": "Back to Modules",
"createLabel": "New category",
"createPlaceholder": "Category name",
"createButton": "Add category",
"moveUp": "Move category up",
"moveDown": "Move category down",
"itemMoveUp": "Move entry up",
"itemMoveDown": "Move entry down",
"rename": "Rename",
"renameLabel": "New name",
"renameSave": "Save",
"renameCancel": "Cancel",
"delete": "Delete",
"deleteBlocked": "This category cannot be deleted",
"empty": "No modules in this category",
"customBadge": "Custom module",
"itemCategory": "Category",
"itemCategoryLabel": "Category for {name}",
"personalNote": "Also {count, plural, one {# personal entry} other {# personal entries}} created by users",
"loadError": "The categories could not be loaded. Please try again.",
"saveError": "The change could not be saved. Please try again.",
"deleteDialog": {
"title": "Delete category",
"bodyEmpty": "The category “{name}” is empty and will be deleted.",
"bodyMove": "The category “{name}” contains entries. These modules are moved to the category you choose here, including personal entries created by users. Nothing is lost.",
"target": "Move to",
"confirm": "Delete",
"confirmMove": "Move and delete",
"cancel": "Cancel"
}
},
"activationDialog": {
"title": "Activate Module: {module}",
"body": "Should the default group get immediate access to this module, or would you rather configure grants separately?",
"grantNow": "Grant Now",
"configureLater": "Configure Later",
"cancel": "Cancel",
"noDefaultGroupHint": "No default group marked — set one under Groups first or configure access manually."
}
},
"theme": {
"light": "Light",
"dark": "Dark",
"system": "System"
},
"bugReport": {
"button": "Report a problem",
"title": "Report a problem",
"intro": "Tessera has just taken a picture of this page – it shows exactly what you see. The picture, your description, the page, version, browser and the most recent error messages are sent by e-mail to your administrator.",
"screenshotAlt": "Screenshot preview",
"screenshotUnavailable": "No screenshot possible – the report will be sent without a picture.",
"attachScreenshot": "Attach screenshot",
"descriptionLabel": "What happened?",
"descriptionPlaceholder": "Optional: What did you do, what did you expect, what happened instead?",
"send": "Send",
"sending": "Sending…",
"cancel": "Cancel",
"close": "Close",
"sent": "Thank you, your report has been sent.",
"errorNotConfigured": "No mailbox has been set up for bug reports yet.",
"errorNotConfiguredAdminHint": "Set the address under Administrator → SMTP in the field \"Bug reports to\".",
"errorNotConfiguredAdminLink": "Go to the SMTP settings",
"errorTooMany": "Too many reports in a short time. Please try again in a few minutes.",
"errorTooLarge": "The picture is too large. Please send the report without the screenshot.",
"errorSendFailed": "The e-mail could not be sent. Please try again later or contact your administrator.",
"errorGeneric": "The report could not be sent."
},
"changelog": {
"title": "What's new",
"intro": "All changes to Tessera, sorted by version – the current version is at the top.",
"unreleasedHeading": "Not yet released (beta)",
"unreleasedHint": "The items under “Not yet released” are already part of this beta but have not been released as a version yet.",
"empty": "No entries yet."
},
"locale": {
"de": "Deutsch",
"en": "English"
},
"modules": {
"categoryTitle": "Modules: {category}",
"openModule": "Open",
"noModules": "No active modules in this category",
"notFound": "Module not found",
"notFoundDescription": "The requested module does not exist or is not activated.",
"backToCategory": "Back to category",
"allModules": "Modules",
"allModulesDescription": "Available modules",
"noActiveModules": "No modules activated. Ask your administrator to enable modules.",
"accessDenied": {
"title": "No Access to This Module",
"body": "You do not have access to this module. Please contact your administrator.",
"manageRequiredBody": "This module is only available to users who may manage it. Please contact your administrator.",
"backToDashboard": "Back to Dashboard"
}
},
"domaincheck": {
"title": "Domain Check",
"description": "Check if a domain is available",
"inputPlaceholder": "Enter domain (e.g. example.com)",
"suggestions": "Alternatives",
"checkButton": "Check",
"statusAvailable": "Available",
"statusRegistered": "Registered",
"noResults": "Enter a domain name to check availability",
"checking": "Checking...",
"error": "Error checking domain"
},
"proxmox": {
"title": "Proxmox",
"description": "State of your Proxmox servers (PVE/PBS/PMG) at a glance — Tessera only observes, it never changes anything.",
"loading": "Loading server list...",
"loadError": "Could not load the server list.",
"emptyState": "No server configured yet. Add one in the module settings.",
"card": {
"unknownValue": "unknown",
"lastPolledAgo": "Last poll {age}",
"notPolledYet": "No poll has run yet. Click \"{refreshLabel}\" above.",
"notPolledYetAutomatic": "No poll has run yet. The values will appear after the next automatic poll.",
"lastOkAgo": "Last reachable {age}",
"orphanText": "This server is deactivated and is no longer polled.",
"orphanAdminHint": "You can reactivate it in the settings.",
"refresh": "Refresh now",
"refreshing": "Refreshing...",
"settingsLink": "Go to settings",
"settingsNav": "Settings",
"product": {
"pve": "Virtualization",
"pbs": "Backup",
"pmg": "Mail gateway"
},
"pve": {
"running": "{count, plural, one {guest running} other {guests running}}",
"stopped": "stopped",
"nodes": "{count, plural, one {# node} other {# nodes}}",
"cpu": "CPU",
"mem": "Memory",
"autostartTitle": "{count, plural, one {# guest is not running although autostart is enabled} other {# guests are not running although autostart is enabled}}",
"autostartGuestDetail": "on {node} · {status}",
"autostartUnchecked": "Autostart could not be checked for {count, plural, one {# stopped guest} other {# stopped guests}}. The access probably lacks the VM.Audit permission.",
"guestType": {
"qemu": "VM",
"lxc": "LXC"
},
"guestStatus": {
"stopped": "stopped",
"paused": "paused",
"suspended": "suspended",
"other": "not running"
}
},
"pbs": {
"used": "Used",
"lastBackupAgo": "Last backup {age}",
"noBackupYet": "no backup yet",
"verifyOk": "Verification OK",
"verifyFailed": "Verification failed",
"verifyUnknown": "Verification unknown",
"noDatastores": "No datastores reported."
},
"pmg": {
"countIn": "Inbound",
"countOut": "Outbound",
"spamCount": "Spam",
"virusCount": "Viruses"
}
},
"health": {
"ok": "Healthy",
"warn": "Warning",
"down": "Unreachable",
"idle": "Not polled yet",
"orphan": "Offline & orphaned"
},
"legend": {
"ok": "{count, plural, one {healthy} other {healthy}}",
"warn": "{count, plural, one {with warning} other {with warnings}}",
"down": "{count, plural, one {unreachable} other {unreachable}}",
"idle": "{count, plural, one {not polled yet} other {not polled yet}}",
"orphan": "{count, plural, one {offline & orphaned} other {offline & orphaned}}",
"barLabel": "Server health: {summary}"
},
"errors": {
"netz": "The server is unreachable. Please check the address and the network connection.",
"zugang": "Access was denied. Please check the username and password, or the token details.",
"rechte": "The stored account does not have enough rights. Please check the assigned role on the Proxmox server.",
"zertifikat": "The server's certificate was rejected. Check the address, or deliberately disable certificate checking for this one server.",
"antwortform": "The server's response did not have the expected shape. Please check the address.",
"server": "The Proxmox server reports its own error. Please try again later.",
"unbekannt": "An unexpected error occurred."
},
"settings": {
"title": "Proxmox — Settings",
"accessDeniedText": "This page is available to administrators and to users who may manage this module.",
"addServer": "Add server",
"noServers": "No server configured yet.",
"nameLabel": "Name",
"productTypeLabel": "Type",
"productTypePve": "PVE",
"productTypePbs": "PBS",
"productTypePmg": "PMG",
"baseUrlLabel": "Address",
"authMethodLabel": "Access method",
"authMethodToken": "API token",
"authMethodPassword": "Username/password",
"tokenIdLabel": "Token ID",
"tokenSecretLabel": "Token secret",
"usernameLabel": "Username",
"passwordLabel": "Password",
"secretUnchangedPlaceholder": "Leave blank to keep the stored secret",
"pollIntervalLabel": "Poll interval (minutes)",
"tlsRejectLabel": "Verify certificate",
"tlsRejectHint": "The exception applies only to this one server, never to all servers at once.",
"activeLabel": "Active",
"save": "Save",
"saving": "Saving...",
"saveError": "Could not save the settings.",
"cancel": "Cancel",
"testConnection": "Test connection",
"testTesting": "Testing connection...",
"testSuccess": "Connection successful.",
"edit": "Edit",
"delete": "Delete",
"deleteConfirmTitle": "Delete server",
"deleteConfirmBody": "Do you really want to delete the server \"{name}\"? The last measured status will be removed as well.",
"deleteConfirmButton": "Delete",
"deleteCancelButton": "Cancel"
}
},
"dkvFleet": {
"pageTitle": "DKV Invoice",
"checkNow": "Check Now",
"checking": "Checking...",
"lastChecked": "Last checked: {time}",
"neverChecked": "Never checked",
"settingsTitle": "Module Settings",
"historyTitle": "Processing History",
"exportFilesTitle": "Recent Export Files",
"emptyHistory": "No invoices processed yet",
"emptyHistoryBody": "Click 'Check Now' to poll the inbox. New invoices will appear here automatically.",
"emptyExports": "No export files available yet",
"emptyVehicles": "No vehicles configured",
"emptyVehiclesBody": "Add vehicles manually or upload a CSV file.",
"status": {
"processed": "Processed",
"error": "Error",
"sendFailed": "Send Failed"
},
"col": {
"dateTime": "Date/Time",
"invoiceNumber": "Invoice Number",
"vehicles": "Vehicles",
"transactions": "Transactions",
"status": "Status",
"exportFile": "Export File",
"licensePlate": "License Plate",
"brand": "Make",
"model": "Model",
"driver": "Driver",
"actions": "Actions"
},
"addVehicle": "Add Vehicle",
"editVehicle": "Edit Vehicle",
"deleteVehicle": "Delete Vehicle",
"deleteVehicleBody": "Vehicle {plate} will be permanently removed from the master list. This action cannot be undone.",
"importCsv": "Import CSV",
"csvFormatHelp": "CSV format (semicolon): Kennzeichen;Marke;Modell;Fahrer",
"csvFormatExample": "Example: GP-JL 728E;Mercedes;GLC 300;Max Mustermann",
"importMode": "Import Mode",
"importMerge": "Merge — add new vehicles, keep existing",
"importReplace": "Replace — delete all existing vehicles and re-import",
"importReplaceWarning": "All existing vehicles will be replaced.",
"importReplaceConfirmTitle": "Replace Vehicles?",
"importReplaceConfirmBody": "All existing vehicles will be replaced with the CSV data. This action cannot be undone.",
"importReplaceConfirmButton": "Replace",
"importSuccess": "{count} vehicles imported",
"vehicleCount": "{count} vehicles",
"tabs": {
"inbox": "Inbox",
"vehicles": "Vehicles"
},
"form": {
"saveRow": "Save changes",
"deleteConfirm": "Delete",
"protocol": "Protocol",
"host": "Host",
"hostExchange": "EWS URL",
"domain": "Domain",
"domainHelp": "Optional — Windows domain (e.g. CONTOSO). Leave blank if not required.",
"port": "Port",
"encryption": "Encryption",
"encryptionNone": "None",
"folder": "Folder / Mailbox",
"folderExchangeHelp": "Common mailboxes: Inbox, SentItems, DeletedItems, Drafts, JunkEmail",
"senderFilter": "Sender Filter",
"pollInterval": "Poll Interval",
"pollIntervalSuffix": "Minutes",
"username": "Username",
"password": "Password",
"exportRecipient": "Export Recipient",
"vehicleFormat": "Vehicle Format String",
"vehicleFormatHelp": "Available placeholders: {Marke}, {Modell}, {Kennzeichen}, {Fahrer}",
"active": "Active",
"testConnection": "Test Connection",
"testTesting": "Testing connection...",
"testSuccess": "Connection successful",
"testFailed": "Connection failed: {error}",
"save": "Save Settings",
"cancel": "Cancel Editing",
"cancelDialog": "Cancel",
"showPassword": "Show password",
"hidePassword": "Hide password",
"exchangeAuthHint": "401 — possible causes:",
"exchangeAuthHint1": "Wrong password or username",
"exchangeAuthHint2": "Domain: Windows short name (e.g. COMPANY, not company.com)",
"exchangeAuthHint3": "Username without domain prefix (e.g. 'max.muster', not 'COMPANY\\max.muster')",
"exchangeAuthHint4": "Office 365 / Exchange Online: EWS basic auth disabled since Oct 2022 — not supported"
},
"errors": {
"pollFailed": "Could not check inbox. Review the configuration under 'Module Settings > Inbox'.",
"smtpFailed": "Export was created but could not be sent. The file is still available for manual download.",
"licensePlateRequired": "License plate is required.",
"loadVehiclesFailed": "Vehicles could not be loaded.",
"saveVehicleFailed": "Saving failed.",
"createVehicleFailed": "Vehicle could not be added.",
"deleteVehicleFailed": "Vehicle could not be deleted."
}
},
"marketplace": {
"title": "Marketplace",
"subtitle": "Discover and activate modules",
"activate": "Activate Module",
"deactivate": "Deactivate",
"searchPlaceholder": "Search modules...",
"statusAll": "All",
"statusActive": "Activated",
"statusAvailable": "Available",
"categoryAll": "All",
"emptyTitle": "No modules available yet",
"emptyBody": "Modules are provided by the system administrator. Check back later.",
"filteredEmptyTitle": "No results",
"filteredEmptyBody": "Try a different search term or adjust your filters.",
"errorLoad": "Could not load modules. Please reload the page.",
"toastActivated": "Module activated successfully",
"toastDeactivated": "Module deactivated successfully",
"toastActivateError": "Activation failed. Please try again.",
"toastDeactivateError": "Deactivation failed. Please try again.",
"deactivateDialogTitle": "Deactivate Module",
"deactivateDialogBody": "Do you want to deactivate {moduleName}? The module will be removed from the sidebar.",
"deactivateDialogConfirm": "Deactivate",
"deactivateDialogCancel": "Cancel",
"tenantContextLabel": "Organization",
"backToMarketplace": "Back to Marketplace",
"detailVersion": "Version {version}",
"changelogTitle": "Changes",
"changelogCurrent": "Current",
"changelogRelease": "Version {version}, {date}",
"changelogKindNew": "New",
"changelogKindChanged": "Changed",
"changelogKindFixed": "Fixed",
"detailStatusActive": "Activated",
"detailStatusInactive": "Not activated",
"accessDenied": "Access denied",
"statusNoAccess": "No Access",
"toastNoAccess": "No access to this module — please contact your administrator.",
"notFound": "This module was not found.",
"openDetail": "Open details for {name}"
},
"certManager": {
"title": "Certificate Manager",
"description": "Collect, check and convert certificates, intermediate certificates, keys and requests into the format you need.",
"tabs": {
"files": "Files",
"filesWithCount": "Files ({count})",
"analyze": "Analyze",
"split": "Split",
"merge": "Merge",
"convert": "Convert",
"templates": "Templates"
},
"roles": {
"end-entity": "Server certificate",
"intermediate": "Intermediate certificate",
"root": "Root certificate",
"privateKey": "Private key",
"csr": "Certificate request (CSR)"
},
"files": {
"dropTitle": "Drop files here or click",
"dropHint": "You can add several files one after another, each one stays in the list. Tessera recognises the content itself, the file extension does not matter.",
"limits": "Up to {maxFiles} files, at most {maxFile} MB per file and {maxTotal} MB in total.",
"memoryNote": "The files stay in this browser window only. Tessera stores none of them; after reloading or closing the page the list is empty.",
"empty": "No files yet. Add your certificates and you will see here what they contain.",
"listTitle": "Your files ({count})",
"remove": "Remove \"{name}\"",
"removeShort": "Remove",
"removeAll": "Remove all",
"analyzing": "Checking files …",
"checking": "Checking …",
"retry": "Try again",
"expired": "expired",
"rejectedTitle": "Not added:",
"rejected": {
"duplicate": "\"{name}\" is already in the list.",
"tooMany": "\"{name}\": the list is full with {max} files.",
"tooLarge": "\"{name}\" is larger than {size} MB.",
"totalTooLarge": "\"{name}\": together this would be more than {size} MB.",
"pasteTooLarge": "\"{name}\" is longer than {chars} characters."
},
"ignored": {
"unknown": "No certificate was recognised in it.",
"nestedZip": "A ZIP inside a ZIP is not opened.",
"encryptedZip": "The ZIP content is password protected and is skipped.",
"brokenZip": "The ZIP cannot be read.",
"tooLarge": "The file is too large and is skipped.",
"suspicious": "The file is packed unusually tightly and is skipped.",
"zipTooLarge": "The ZIP contains too much data and is not opened.",
"tooManyEntries": "The ZIP contains too many files and is not opened.",
"unsupportedKey": "This key type is not supported.",
"protectionTooExpensive": "The password protection of this file would take too much work to check. It is skipped."
},
"pasteToggle": "Paste PEM text",
"pasteHint": "Paste text that starts with \"-----BEGIN\". Several blocks in a row are fine.",
"pasteLabel": "Pasted PEM text",
"pasteAdd": "Add",
"pastedLabel": "Pasted text {n}",
"originPaste": "Pasted text",
"locked": {
"message": "\"{path}\" is password protected.",
"optional": "\"{path}\" is password protected. You do not need the file as long as the certificate and the key are already there.",
"passwordLabel": "Password for \"{name}\"",
"unlock": "Unlock",
"unlockAnyway": "Unlock anyway",
"wrong": "The password does not match.",
"note": "The password stays in this browser window. It is sent along with every check of the files, but never stored."
},
"keyWasEncrypted": "was encrypted",
"fetchedFrom": "fetched from {host}"
},
"errors": {
"generic": "The files could not be checked. Please try again.",
"invalidInput": "The input is incomplete or invalid. Please check your entries.",
"notACertificate": "At least one entry is not a certificate. Please check the files.",
"noChain": "There is no chain to download. Add the intermediate certificate.",
"keyMissing": "This needs the matching private key. Add it in the \"Files\" tab.",
"keyMismatch": "The key does not belong to this certificate.",
"passwordRequired": "Please enter a password.",
"formatNotPossible": "This format is not possible for the key type. Choose another format.",
"templateNeedsKey": "This template needs the certificate and the matching private key.",
"tooLarge": "The files are too large together. Remove some files and try again.",
"aiaMissing": "The certificate names no address from which the missing certificate could be fetched.",
"aiaInternal": "The address in the certificate does not point to a public server and is not contacted.",
"aiaNotIssuer": "The address did not deliver a matching certificate of the issuer.",
"aiaUnreachable": "The issuer's server cannot be reached. Download the certificate yourself and add it.",
"aiaTooLarge": "The issuer's answer is too large and was discarded.",
"buildFailed": "The file could not be created. Please try again.",
"tooManyItems": "The files contain too many certificates, keys or requests (at most 200 certificates, 50 keys and 50 requests at once). Remove some files and try again.",
"aiaNotAllowed": "The address in the certificate may not be fetched. Only ordinary http or https addresses without credentials and without a special port are allowed. Download the certificate yourself and add it."
},
"workspace": {
"empty": "No files yet. Upload your certificates in the “Files” tab.",
"goToFiles": "Go to the “Files” tab",
"basis": "{count, plural, one {Based on 1 file from the “Files” tab.} other {Based on # files from the “Files” tab.}}",
"stale": "The results do not match your files right now. Please check the files again."
},
"analyze": {
"intro": "Everything recognised in your files: the chains first, then every certificate in detail. All times are shown in UTC, as in the certificate.",
"chainsTitle": "Chains",
"certificatesTitle": "Certificates",
"ignoredTitle": "Not used",
"nothingFound": "No certificate has been recognised in the files yet.",
"issuer": "Issued by",
"validity": "Valid",
"validRange": "{from} to {to}",
"names": "Valid for",
"key": "Key",
"keyRsa": "RSA, {bits} bit",
"keyEc": "EC, curve {curve}",
"serial": "Serial number",
"sha256": "SHA-256",
"sha1": "SHA-1",
"source": "Found in",
"valid": "Valid",
"expired": "Expired",
"expiresSoon": "Expires in {days} days",
"explain": {
"end-entity": "The actual certificate for your domain. This one belongs on the web server.",
"intermediate": "Vouches for your server certificate towards the browser. It is installed together with the server certificate (chain).",
"root": "The top certificate authority. Browsers and operating systems usually have it already."
},
"matchingKey": "Matching key present",
"keysTitle": "Private keys",
"csrsTitle": "Certificate requests",
"lockedTitle": "Protected files",
"lockedNeeded": "needs a password",
"lockedWrong": "The password does not match",
"lockedHint": "Enter the password in the \"Files\" tab.",
"wasEncrypted": "Was encrypted",
"belongsTo": "Belongs to",
"noCertificateYet": "There is no certificate for it yet.",
"subject": "Owner",
"matchedKey": "Matching key",
"matchedCertificates": "Matching certificate",
"matchedCsr": "Matching request",
"present": "present",
"absent": "not present",
"explainKey": "Belongs to your server certificate and stays secret. Never pass it on.",
"explainCsr": "The request used to order a certificate from the certification authority."
},
"split": {
"intro": "You can download every detected part on its own in its natural format, or all together as a ZIP. Private keys stay protected by a password if they already were in your file.",
"nothingFound": "Nothing has been recognised yet that could be downloaded.",
"download": "Download",
"downloadFor": "Download \"{name}\"",
"downloadAll": "Download all as ZIP",
"zipFilename": "Certificates.zip",
"keyNote": "Private keys are secret. Protect the files with a password if you store or pass them on.",
"protectKeys": "Protect keys with a password",
"keyPassword": "Password for the keys",
"keysWereProtected": "At least one key was protected by a password in your file. Without protection the key files are saved unencrypted. Anyone who gets them can use them.",
"passwordNeeded": "Please enter a password for the keys, or switch the protection off.",
"busy": "Preparing …",
"keyProtected": "protected by a password",
"keyPlain": "without password protection"
},
"merge": {
"intro": "Tessera orders the server certificate, intermediate certificates and root certificate itself and checks that each certificate was really issued by the next one. The order of your files does not matter.",
"noCertificates": "No certificate has been recognised in the files yet. Add a certificate in the “Files” tab.",
"chooseHead": "For which certificate should the chain be built?",
"includeRoot": "Include root certificate",
"noRootAvailable": "The root certificate is not among your files. Most servers do not need it anyway.",
"downloadFullchain": "Download fullchain",
"downloadChain": "Download chain only",
"busy": "Creating …",
"chainNeedsIssuer": "An intermediate certificate is missing for “chain only”. Add it in the “Files” tab.",
"formatLabel": "Chain format",
"formats": {
"pem": "PEM (.pem)",
"p7b": "PKCS#7 (.p7b)",
"p7c": "PKCS#7, binary (.p7c)"
},
"bundleTitle": "Certificate and key",
"bundleHint": "A single PEM file with the server certificate, the intermediate certificates and the private key. Keep it safe.",
"downloadBundle": "Certificate and key (one PEM file)",
"bundleNeedsKey": "There is no matching private key yet. Add it in the “Files” tab.",
"pfxTitle": "PFX file",
"pfxIntro": "A password-protected file with certificates and key, as Windows, IIS and many devices expect it.",
"pfxNoKey": "Without a matching key the PFX file contains only the certificates.",
"downloadPfx": "Download PFX file"
},
"chain": {
"issuedBy": "Issued by {name}",
"validUntil": "Valid until {date}",
"unknownIssuer": "unknown",
"gapAfterLeaf": "Intermediate certificate missing: “{name}”",
"gapAfterLeafHint": "Without this certificate some devices will not trust the server. Add it in the “Files” tab.",
"gapAfterCa": "A certificate above this one is missing, usually the root certificate “{name}”. A fullchain without the root does not need it.",
"fetchButton": "Fetch missing certificate",
"fetching": "Fetching …",
"fetchHint": "Only when you click, Tessera asks {host}, the issuer address named in the certificate. Nothing is fetched automatically.",
"fetchNoAddress": "The certificate names no address to fetch from. Download the missing certificate from the issuer and add it in the “Files” tab.",
"fetchAlready": "This certificate is already in the list.",
"fetchListFull": "The list is full. Remove a file and try again.",
"fetchListTooLarge": "The files would be too large together. Remove a file and try again.",
"fetchFailed": "The certificate could not be fetched. Please try again later or download it from the issuer."
},
"passwordInput": {
"show": "Show password",
"hide": "Hide password"
},
"pfx": {
"password": "PFX password",
"repeat": "Repeat password",
"mismatch": "The two passwords do not match.",
"encryption": "Encryption",
"compat": "Compatible (also older Windows servers)",
"modern": "Modern (AES-256)",
"modernHint": "Older Windows servers, such as Windows Server 2016, often cannot open the modern encryption. When in doubt, choose “Compatible”."
},
"convert": {
"intro": "Convert a single item of your files into another format.",
"nothingFound": "Nothing has been recognised yet that could be converted.",
"item": "What should be converted?",
"format": "Target format",
"groupCertificates": "Certificates",
"groupKeys": "Private keys",
"groupCsrs": "Certificate requests",
"formats": {
"certPem": "PEM (.crt)",
"certDer": "DER (.cer)",
"p7b": "PKCS#7 (.p7b)",
"p7c": "PKCS#7, binary (.p7c)",
"pkcs8": "PKCS#8 (.key)",
"traditional": "Traditional (PKCS#1 for RSA, SEC1 for EC)",
"pkcs8Der": "PKCS#8, binary (.key.der)",
"csrPem": "PEM (.csr)",
"csrDer": "DER (.csr.der)"
},
"keyNote": "The key is sent to Tessera only for the conversion and is not stored anywhere.",
"protectKey": "Protect the key with a password",
"keyPassword": "Password for the key",
"download": "Download",
"busy": "Creating …"
},
"templates": {
"intro": "Choose the system the certificate is going to run on. Tessera creates the matching files with one click and shows the lines for the setup. Every template needs the server certificate and the matching private key.",
"chooseHead": "For which certificate should the files be created?",
"needsKey": "There is no matching private key for this certificate yet. Add it in the “Files” tab, then the templates become available.",
"delivers": "What you get",
"stepsTitle": "How to proceed",
"download": "Download template",
"busy": "Creating …",
"zipHint": "Several files come together in one ZIP file that also contains instructions.",
"snippetTitle": "Lines for the setup",
"snippetHint": "Adjust the paths to your server.",
"copy": "Copy",
"copied": "Copied",
"instructionsFile": "INSTRUCTIONS.txt",
"instructionsHeading": "Instructions for {name}",
"instructionsFiles": "Included files",
"instructionsSnippet": "Lines for the setup",
"nginx": {
"title": "Nginx",
"delivers": "fullchain.pem (server certificate and intermediate certificates) and privkey.pem (private key).",
"steps": {
"1": "Copy both files to your server, for example to the folder /etc/nginx/ssl.",
"2": "Add the two lines shown to the server block of your Nginx configuration.",
"3": "Check the settings with “nginx -t” and reload Nginx with “nginx -s reload”."
}
},
"apache": {
"title": "Apache 2.4.8 and newer",
"delivers": "fullchain.pem (server certificate and intermediate certificates) and privkey.pem (private key).",
"steps": {
"1": "Copy both files to your server, for example to the folder /etc/ssl.",
"2": "Add the two lines shown to the VirtualHost for port 443.",
"3": "Check the settings with “apachectl configtest” and reload Apache."
}
},
"apacheLegacy": {
"title": "Apache older than 2.4.8",
"delivers": "cert.pem (server certificate), chain.pem (intermediate certificates) and privkey.pem (private key).",
"steps": {
"1": "Copy the files to your server, for example to the folder /etc/ssl.",
"2": "Add the lines shown to the VirtualHost for port 443. Older Apache versions need the chain in a file of its own.",
"3": "Check the settings with “apachectl configtest” and reload Apache."
}
},
"iis": {
"title": "Windows / IIS",
"delivers": "A PFX file with certificates and key. The compatible encryption is preselected; older Windows servers can open it as well.",
"steps": {
"1": "Copy the PFX file to the Windows server.",
"2": "Import it by double-click into the “Local Computer” store, “Personal”, or with the PowerShell line shown. You enter the password there.",
"3": "Select the certificate in IIS Manager under “Bindings” of the website."
}
},
"npm": {
"title": "Nginx Proxy Manager",
"delivers": "certificate.pem (server certificate), intermediate.pem (intermediate certificates, if any) and privkey.pem (private key in the traditional format).",
"steps": {
"1": "In Nginx Proxy Manager open “SSL Certificates” and click “Add SSL Certificate”. Choose “Custom”.",
"2": "Enter a name. For “Certificate Key” choose the file privkey.pem, for “Certificate” the file certificate.pem and for “Intermediate Certificate” the file intermediate.pem.",
"3": "Save, then select the certificate on the proxy host in the “SSL” tab."
}
},
"haproxy": {
"title": "HAProxy",
"delivers": "A single PEM file with server certificate, intermediate certificates and private key.",
"steps": {
"1": "Copy the file to your server, for example to the folder /etc/haproxy/certs. Protect it, because it contains the key.",
"2": "Add the line shown to the frontend block of your HAProxy configuration.",
"3": "Reload HAProxy, for example with “systemctl reload haproxy”."
}
},
"tomcat": {
"title": "Tomcat / Java",
"delivers": "A file in PKCS#12 format (.p12) with certificates and key. The compatible encryption is preselected.",
"steps": {
"1": "Copy the file to your server, for example to the conf folder of Tomcat.",
"2": "Add the line shown to the SSLHostConfig block of server.xml and replace IHR-PASSWORT with the password you set here.",
"3": "Restart Tomcat."
}
}
}
},
"tenderRadar": {
"page": {
"title": "Tender Radar",
"loading": "Loading…",
"settingsTitle": "Settings",
"mySourcesTitle": "My sources",
"pollNow": "Fetch now",
"pollNowTitle": "Fetch due sources now",
"polling": "Fetching…",
"pollError": "The fetch could not be triggered. You may not have the required permissions.",
"pollErrorDismiss": "Dismiss"
},
"results": {
"colTitle": "Title",
"colBuyer": "Contracting Authority",
"colDeadline": "Deadline",
"colValue": "Value",
"colPublished": "Published",
"colTriage": "Triage",
"noValue": "no value stated",
"error": "Could not load tenders.",
"emptyTitle": "No tenders found.",
"emptyBody": "Adjust the filters or disable \"open only\".",
"markUnread": "Mark as unread",
"markRead": "Mark as read",
"readLabel": "Read",
"unreadLabel": "Unread",
"removeFavorite": "Remove favorite",
"setFavorite": "Set favorite",
"favoriteOn": "★ Favorite",
"favoriteOff": "☆ Favorite",
"showingRange": "Showing {from}–{to} of {total}",
"prevPage": "← Back",
"nextPage": "Next →"
},
"filter": {
"sortPublished": "Publication date",
"sortDeadline": "Deadline",
"sortValue": "Estimated value",
"searchLabel": "Search",
"searchPlaceholder": "Title or contracting authority…",
"sortLabel": "Sort by",
"openOnlyLabel": "Open only",
"favOnlyLabel": "Favorites only",
"deadlineFromLabel": "Deadline from",
"deadlineToLabel": "Deadline to",
"plzLabel": "Postal code",
"plzPlaceholder": "e.g. 10",
"bundeslandLabel": "Federal state",
"bundeslandAll": "All federal states",
"cpvLabel": "Sector (CPV)",
"cpvPlaceholder": "e.g. construction, IT, health…",
"cpvRemoveAria": "Remove division {code}",
"valueMinLabel": "Estimated value from (€)",
"valueMinPlaceholder": "min.",
"valueMaxLabel": "Estimated value to (€)",
"valueMaxPlaceholder": "max.",
"includeNullValueLabel": "Include tenders without a stated value",
"bundeslandOptions": {
"DE1": "Baden-Württemberg",
"DE2": "Bavaria",
"DE3": "Berlin",
"DE4": "Brandenburg",
"DE5": "Bremen",
"DE6": "Hamburg",
"DE7": "Hesse",
"DE8": "Mecklenburg-Western Pomerania",
"DE9": "Lower Saxony",
"DEA": "North Rhine-Westphalia",
"DEB": "Rhineland-Palatinate",
"DEC": "Saarland",
"DED": "Saxony",
"DEE": "Saxony-Anhalt",
"DEF": "Schleswig-Holstein",
"DEG": "Thuringia"
},
"cpvDivisions": {
"03": "Agricultural, farming, fishing, forestry and related products",
"09": "Petroleum products, fuel, electricity and other sources of energy",
"14": "Mining, basic metals and related products",
"15": "Food, beverages, tobacco and related products",
"16": "Agricultural machinery",
"18": "Clothing, footwear, luggage articles and accessories",
"19": "Leather and textile fabrics, plastic and rubber materials",
"22": "Printed matter and related products",
"24": "Chemical products",
"30": "Office and computing machinery, equipment and supplies except furniture and software packages",
"31": "Electrical machinery, apparatus, equipment and consumables; lighting",
"32": "Radio, television, communication, telecommunication and related equipment",
"33": "Medical equipment, pharmaceutical products and personal care products",
"34": "Transport equipment and auxiliary products to transportation",
"35": "Security, fire-fighting, police and defence equipment",
"37": "Musical instruments, sport goods, games, toys, handicraft, art materials and accessories",
"38": "Laboratory, optical and precision equipment (excl. glasses)",
"39": "Furniture (including office furniture), furnishings, domestic appliances (excl. lighting) and cleaning products",
"41": "Collected and purified water",
"42": "Industrial machinery",
"43": "Machinery for mining, quarrying, construction equipment",
"44": "Construction structures and materials; auxiliary products to construction",
"45": "Construction work",
"48": "Software package and information systems",
"50": "Repair and maintenance services",
"51": "Installation services (except software)",
"55": "Hotel, restaurant and retail trade services",
"60": "Transport services (excl. waste transport)",
"63": "Supporting and auxiliary transport services; travel agency services",
"64": "Postal and telecommunications services",
"65": "Public utilities",
"66": "Financial and insurance services",
"70": "Real estate services",
"71": "Architectural, construction, engineering and inspection services",
"72": "IT services: consulting, software development, Internet and support",
"73": "Research and development services and related consultancy services",
"75": "Administration, defence and social security services",
"76": "Services related to the oil and gas industry",
"77": "Agricultural, forestry, horticultural, aquacultural and apicultural services",
"79": "Business services: law, marketing, consulting, recruitment, printing and security",
"80": "Education and training services",
"85": "Health and social work services",
"90": "Sewage, refuse, cleaning and environmental services",
"92": "Recreational, cultural and sporting services",
"98": "Other community, social and personal services"
}
},
"savedSearch": {
"title": "Saved Searches",
"saveAsLabel": "Save current filters as",
"namePlaceholder": "Name of the saved search…",
"save": "Save",
"cancel": "Cancel",
"loading": "Loading…",
"empty": "No saved searches yet.",
"loadTitle": "Load saved search",
"instantAlertTitle": "Instant email alert for new matches of this search",
"instantAlertLabel": "Instant alert",
"instantAlertAria": "Instant alert for {name}",
"renameTitle": "Rename",
"renameAria": "Rename {name}",
"renameConfirmAria": "Confirm rename of {name}",
"renameCancelAria": "Cancel rename",
"deleteTitle": "Delete",
"deleteAria": "Delete {name}",
"errorLoad": "Could not load saved searches.",
"errorSave": "Could not save the search.",
"errorRename": "Could not rename the search.",
"errorDelete": "Could not delete the search.",
"errorToggleAlert": "Could not toggle the instant alert."
},
"detail": {
"dialogAria": "Tender details",
"title": "Tender details",
"close": "Close",
"loading": "Loading…",
"error": "Could not load the tender.",
"fieldTitle": "Title",
"fieldBuyer": "Contracting Authority",
"fieldRegion": "Region / Postal code / Federal state",
"fieldCpv": "CPV codes",
"noCpv": "no CPV codes stated",
"fieldDeadline": "Deadline",
"noDeadline": "no deadline stated",
"fieldValue": "Estimated Value",
"noValue": "no value stated",
"fieldProcedureType": "Procedure Type",
"fieldStatus": "Status",
"fieldPublished": "Published",
"mirrorNotice": "Tender documents are not mirrored locally — the link below leads directly to the original on the source portal.",
"sourceLink": "{portal}: View tender on source portal →",
"noSourceLink": "{portal}: No source link available.",
"sourceLinkFallback": "View tender on source portal →",
"noSourceLinkFallback": "No source link available."
},
"coverage": {
"label": "Data coverage:",
"text": "Currently only EU-wide above-threshold tenders from the central DÖE source are ingested. Below-threshold tenders from individual contracting authorities are not yet included — a short result list is therefore not a defect.",
"denylistLabel": "Manual watch:",
"denylistText": "These portals do not permit automated access under their terms of use and must therefore be checked manually:"
},
"settings": {
"title": "Tender Radar — Settings",
"rssSectionTitle": "RSS Feeds",
"rssSectionBody": "Public, platform-wide RSS sources (e.g. service.bund.de or a subreport-elvis municipal feed) — applies to everyone equally.",
"rssSectionUserNote": "Add personal feeds under \"My sources\".",
"accessDeniedText": "This page manages platform-wide settings and is reserved for administrators.",
"digestIntervalLabel": "Digest Interval",
"digestDaily": "Daily",
"digestWeekly": "Weekly",
"digestOff": "Off",
"digestHelp": "Summarizes new matches from your saved searches in a daily or weekly digest email. \"Off\" disables the digest — instant alerts per saved search remain usable independently.",
"saveSuccess": "Setting saved.",
"errorLoad": "Could not load notification setting",
"errorSave": "Could not save notification setting"
},
"sourceConfig": {
"errorLoad": "Could not load configuration",
"errorSave": "Could not save settings",
"validationError": "Interval must be between {min} and {max} minutes.",
"sourceLabel": "Source",
"lastIngestedLabel": "Last Ingested Day",
"neverIngested": "Not yet ingested",
"pollIntervalLabel": "Poll Interval (Minutes) *",
"minutesSuffix": "min.",
"pollIntervalHelp": "Cron tick frequency ({min}–{max} min.) — the actual DÖE poll is additionally throttled by the day cursor.",
"activeLabel": "Active",
"saving": "Saving...",
"save": "Save",
"saveSuccess": "Settings saved."
},
"rssFeeds": {
"errorLoad": "Could not load RSS feeds",
"errorAdd": "Could not save the RSS feed",
"errorRemove": "Could not remove the RSS feed",
"validationRequired": "URL and label are required.",
"empty": "No RSS feeds configured yet.",
"activeLabel": "active",
"inactiveLabel": "inactive",
"removeAria": "Remove RSS feed \"{label}\"",
"removing": "Removing...",
"remove": "Remove",
"urlLabel": "Feed URL *",
"urlPlaceholder": "https://www.service.bund.de/.../RSSGenerator_Ausschreibungen.xml",
"labelLabel": "Label *",
"labelPlaceholder": "e.g. service-bund",
"adding": "Adding...",
"add": "Add Feed"
},
"emailAlerts": {
"notSaved": "Not yet saved — fill in and save the mailbox configuration.",
"protocolLabel": "Protocol *",
"protocolImap": "IMAP",
"protocolExchange": "Exchange",
"hostLabelExchange": "EWS Endpoint URL",
"hostLabelImap": "IMAP Server",
"hostPlaceholderExchange": "https://mail.company.com/EWS/Exchange.asmx",
"hostPlaceholderImap": "imap.company.com",
"portLabel": "Port *",
"encryptionLabel": "Encryption *",
"encryptionNone": "None",
"encryptionStarttls": "STARTTLS",
"encryptionSslTls": "SSL-TLS",
"folderLabel": "Folder",
"folderPlaceholderExchange": "Inbox",
"folderPlaceholderImap": "INBOX",
"domainLabel": "Windows Domain",
"domainPlaceholder": "CONTOSO",
"senderFilterLabel": "Sender Filter",
"senderFilterPlaceholder": "alerts@tenderportal.com",
"usernameLabel": "Username",
"passwordLabel": "Password",
"passwordPlaceholder": "••••••••",
"showPassword": "Show password",
"hidePassword": "Hide password",
"activeLabel": "Active",
"saving": "Saving...",
"save": "Save",
"saveSuccess": "Settings saved.",
"errorSave": "Could not save settings",
"testConnection": "Test Connection",
"testTesting": "Testing connection...",
"testSuccess": "Connection successful",
"testFailed": "Connection failed: {error}"
},
"mySources": {
"title": "My sources",
"intro": "Tenders that arrive through your mailbox will then appear in the results list for every colleague at your organization — there is no separate visibility per mailbox.",
"mailboxSectionTitle": "My mailbox",
"feedsSectionTitle": "My feeds",
"notificationSectionTitle": "Notification",
"platformFeedsNote": "These feeds are maintained by the administration and apply to everyone."
}
},
"releaseNotice": {
"title": "New in version {version}",
"intro": "Tessera has been updated. Here is what changed for you:",
"versionHeading": "Version {version}",
"section": {
"new": "New",
"changed": "Improved",
"fixed": "Fixed"
},
"moreVersions": "There are also changes from {count, plural, one {# earlier version} other {# earlier versions}}.",
"showAll": "View all changes",
"confirm": "Got it",
"close": "Close window",
"contentLabel": "Changes"
},
"customModules": {
"openInNewTab": "Open in new tab",
"notFound": "This module no longer exists.",
"loadError": "This module could not be loaded. Please try again later.",
"invalidUrl": "This module's address is not a valid https address and is therefore not shown.",
"loading": "Loading …",
"preload": {
"toggle": "Preload at startup",
"limitReached": "At most {max} custom modules can be preloaded at startup. Turn off preloading for another module first.",
"saveError": "The setting could not be saved. Please try again.",
"settingsTitle": "Preload at startup",
"settingsDescription": "Tessera loads the selected modules invisibly in the background shortly after startup so they are ready the first time you open them. You can select at most {max} modules. The selection applies only to you, in the browser and in the desktop app.",
"count": "{count} of {max} selected",
"shared": "For everyone",
"personal": "Personal",
"empty": "There are no custom modules yet.",
"loadError": "The modules could not be loaded. Please reload the page."
},
"form": {
"create": "Add custom module",
"edit": "Edit custom module",
"name": "Name",
"url": "Address",
"urlHint": "The address must start with https://.",
"category": "Category",
"nameRequired": "Please enter a name.",
"urlNotHttps": "Please enter an address that starts with https://.",
"urlCredentials": "The address must not contain a user name or a password.",
"saveError": "The module could not be saved. Please try again.",
"deleteError": "The module could not be deleted. Please try again.",
"forbidden": "You do not have permission for this action.",
"invalidInput": "The details were not accepted. Please check name, address and category.",
"deleteConfirm": {
"title": "Delete custom module",
"bodyShared": "Do you really want to delete “{name}”? The entry disappears from the sidebar for all users.",
"bodyPersonal": "Do you really want to delete “{name}”? The entry disappears from your sidebar."
}
},
"manage": {
"actions": "Actions",
"loadError": "The custom modules could not be loaded."
}
},
"kantineDatev": {
"title": "Canteen billing",
"description": "Check canteen CSV files and download them as a DATEV payroll file for the salary run.",
"tabs": {
"billing": "Billing",
"settings": "Settings"
},
"loading": "Loading …",
"dropZone": {
"placeholder": "Drag a CSV file here or click",
"formats": ".csv, semicolon-separated, UTF-8 or Windows-1252",
"clear": "Remove file"
},
"noStorage": "The uploaded data is not stored.",
"checking": "Checking file …",
"notConfigured": {
"admin": "Consultant number, client number and wage type have not been set yet. Without them no DATEV file can be created.",
"adminAction": "Go to settings",
"user": "An administrator or someone who may manage this module has to set the consultant number, client number and wage type first."
},
"summary": {
"title": "Check result",
"rows": "Rows",
"month": "Billing month",
"total": "Total amount",
"noMonth": "not detected"
},
"warnings": {
"title": "Notes",
"multipleMonths": "Different billing months detected: {months}. All rows should be in the same billing month."
},
"errors": {
"title": "Errors in the file",
"line": "Line",
"field": "Field",
"message": "Message",
"headerMissing": "The file has no header line.",
"headerColumns": "The header has too few columns. Is the separator correct (semicolon)?",
"columnCount": "The line has too few columns.",
"personalNrMissing": "Personnel number is missing",
"personalNrNotNumeric": "Personnel number must be numeric",
"betragMissing": "Amount is missing",
"betragFormat": "Amount must be in German number format (comma as decimal separator)",
"vonMissing": "Billing from is missing",
"vonFormat": "Billing from must be in the format DD.MM.YYYY",
"bisMissing": "Billing to is missing",
"bisFormat": "Billing to must be in the format DD.MM.YYYY",
"multiMonthRange": "The billing period spans several months",
"noRows": "The file contains no data rows.",
"settingsMissing": "Consultant number, client number and wage type have not been set yet.",
"hasErrors": "The file contains errors and cannot be exported.",
"qualityCheckFailed": "The generated file failed the quality check.",
"request": "The request failed. Please try again."
},
"fields": {
"header": "Header",
"zeile": "Line",
"datei": "File",
"personalNr": "Personnel number",
"betrag": "Amount",
"abrechnungVon": "Billing from",
"abrechnungBis": "Billing to",
"abrechnungVon/abrechnungBis": "Billing period"
},
"download": {
"button": "Download DATEV file",
"busy": "Creating file …",
"done": "The file {filename} has been downloaded."
},
"settings": {
"intro": "These values appear in the header and the lines of the DATEV file. They apply to all users and only have to be set once.",
"beraterNr": "Consultant number",
"mandantNr": "Client number",
"lohnart": "Wage type",
"digitsOnly": "Please enter digits only (1 to 10 digits).",
"save": "Save",
"saving": "Saving …",
"saved": "The settings have been saved."
}
},
"handelswareDatev": {
"title": "Merchandise",
"description": "Map merchandise sales from Excel to revenue accounts and download them as a DATEV booking file.",
"tabs": {
"import": "Import",
"accounts": "Accounts",
"settings": "Settings"
},
"loading": "Loading …",
"notConfigured": {
"admin": "The default revenue account and the starting counter account have not been set yet. Without them no accounts can be assigned.",
"adminAction": "Go to settings",
"user": "An administrator or someone who may manage this module has to set the default revenue account and the starting counter account first."
},
"import": {
"dropPlaceholder": "Drag an Excel file here or click",
"dropFormats": ".xlsx, booking text in column A, amount in column B, header text in cell B1",
"clear": "Remove file",
"checking": "Checking file …",
"headerText": "Header text",
"exportFilename": "Download file name",
"date": "Booking date (DDMM)",
"dateHint": "Derived from the file name (last day of the month) and can be changed.",
"dateInvalid": "Please enter the date as DDMM, for example 3103 for 31 March.",
"columns": {
"text": "Booking text",
"amount": "Amount",
"sh": "D/C",
"counter": "Counter account",
"date": "Date",
"revenue": "Revenue account"
},
"newBadge": "new",
"newSummary": "{count, plural, one {One new account will be saved when you download} other {# new accounts will be saved when you download}}",
"noNewAccounts": "All products already have an account.",
"totals": "Total debit {debit}, total credit {credit}",
"truncated": "Showing the first {shown} of {total} rows. The file contains all rows.",
"noRows": "The file contains no data rows.",
"rowErrorsTitle": "Faulty rows",
"rowErrorLine": "Row {line}",
"download": "Download booking file",
"downloading": "Creating file …",
"downloaded": "The file {filename} has been downloaded. {count, plural, =0 {No new accounts were saved.} one {One new account was saved.} other {# new accounts were saved.}}",
"reloadPreview": "Reload preview"
},
"accounts": {
"name": "Name",
"counter": "Counter account",
"revenue": "Revenue account",
"actions": "Actions",
"empty": "There are no accounts yet.",
"add": "Add",
"edit": "Edit",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"deleteConfirm": "Really delete account “{name}”?",
"deleteYes": "Yes, delete",
"namePlaceholder": "Product name",
"importCsv": "Import CSV",
"exportCsv": "Export CSV",
"importConfirm": "{count, plural, =0 {The empty account list is} one {The existing account is} other {All # existing accounts are}} replaced by the content of the file “{file}”. Continue?",
"importReplace": "Replace accounts",
"importDone": "{count, plural, one {One account was imported.} other {# accounts were imported.}}",
"importErrors": "The file contains errors, nothing was changed:",
"csvHint": "CSV format: Name;Counter account;Account (semicolon, UTF-8 or Windows-1252).",
"invalidNumber": "Counter account and revenue account must be whole numbers.",
"nameRequired": "Please enter a name."
},
"settings": {
"intro": "These values apply to all users and only have to be set once.",
"erloeskonto": "Default revenue account",
"erloeskontoHelp": "Assigned to new accounts.",
"startGegenkonto": "Starting counter account",
"startGegenkontoHelp": "First number handed out when the account list is empty.",
"numberInvalid": "Please enter a whole number from 1 to 999999999.",
"save": "Save",
"saving": "Saving …",
"saved": "The settings have been saved."
},
"errors": {
"settingsMissing": "The default revenue account and the starting counter account have not been set yet.",
"invalidFile": "The file is not a valid Excel file.",
"tooManyRows": "The file contains too many data rows (10000 at most).",
"rowErrors": "The file contains faulty rows and cannot be exported.",
"noRows": "The file contains no data rows.",
"buchungsdatumInvalid": "The booking date must be given as DDMM, for example 3103.",
"accountsChanged": "The account list has changed in the meantime. Please upload the file again to refresh the preview.",
"nameTaken": "An account with this name already exists.",
"umsatzInvalid": "The amount is not a valid number.",
"csvErrors": "The CSV file contains errors. Nothing was changed.",
"newAccountsInvalid": "The details of the new accounts are invalid.",
"nameEmpty": "The name is missing.",
"nameTooLong": "The name is too long (120 characters at most).",
"gegenkontoInvalid": "The counter account must be a whole number from 1 to 999999999.",
"erloeskontoInvalid": "The revenue account must be a whole number from 1 to 999999999.",
"missingErloeskonto": "The revenue account is missing and no default revenue account is set.",
"duplicateName": "The name appears more than once in the file.",
"request": "The request failed. Please try again."
}
},
"moduleCategories": {
"domain-tools": "Domains",
"security-tools": "Security",
"fleet": "Fleet",
"infrastructure": "Infrastructure",
"procurement": "Procurement",
"accounting": "Financial accounting",
"custom-modules": "Custom modules"
},
"nextcloudStatus": {
"title": "Nextcloud status",
"description": "Keep track of versions and availability of your Nextcloud clouds",
"loading": "Loading clouds …",
"loadError": "The clouds could not be loaded. Please reload the page.",
"empty": "No clouds have been added yet.",
"emptyManage": "Add your first cloud with “Add cloud”.",
"newestVersion": "Newest Nextcloud version: {version}",
"referenceUnavailable": "Version data currently unavailable",
"card": {
"version": "Version",
"versionUnknown": "—",
"lastCheck": "Last checked {age}",
"neverChecked": "Never checked",
"openCloud": "Open cloud in a new tab",
"noLogo": "No logo",
"pendingRetry": "Check failed, will be repeated in a few minutes"
},
"level": {
"green": "Green",
"yellow": "Yellow",
"red": "Red",
"unknown": "Not rated"
},
"reason": {
"current": "Up to date",
"updateAvailable": "Update to {version} available",
"eolSoon": "Support ends on {date}",
"eolPassed": "Support ended on {date}",
"eolPassedNoDate": "Support ended",
"unreachable": "Not reachable",
"invalidResponse": "Not a valid Nextcloud response",
"maintenance": "Maintenance mode",
"needsDbUpgrade": "Database upgrade pending",
"noReference": "Rating not possible",
"versionUnknown": "Version unknown",
"notChecked": "Not checked yet"
},
"errorHint": {
"certName": "Certificate does not match the address",
"certExpired": "Certificate expired",
"certUntrusted": "Certificate not trusted",
"dnsNotFound": "Address not found",
"connectionRefused": "Connection refused",
"timeout": "Timed out",
"httpStatus": "Server responds with error {code}",
"fallback": "Connection error"
},
"notify": {
"up": "Nextcloud {name}: back in order",
"down": {
"unreachable": "Nextcloud {name}: unreachable",
"invalidResponse": "Nextcloud {name}: no valid response",
"maintenance": "Nextcloud {name}: in maintenance mode",
"needsDbUpgrade": "Nextcloud {name}: database upgrade pending",
"eolPassed": "Nextcloud {name}: support expired"
}
},
"search": {
"label": "Search clouds",
"placeholder": "Search by customer name …",
"noResults": "No cloud matches “{term}”."
},
"sort": {
"label": "Sort by",
"name": "Customer name",
"status": "Status",
"version": "Version",
"eol": "End of support"
},
"actions": {
"add": "Add cloud",
"checkAll": "Check now",
"checking": "Checking …"
},
"cardActions": {
"refresh": "Check this cloud now",
"edit": "Edit cloud"
},
"bell": {
"label": "Notify me",
"titleOn": "Notifications are on – click to turn them off",
"titleOff": "Notify me about outages and recovery",
"error": "The notification setting could not be changed. Please try again."
},
"form": {
"addTitle": "Add cloud",
"editTitle": "Edit cloud",
"customerName": "Customer name",
"baseUrl": "Cloud address",
"baseUrlPlaceholder": "https://cloud.example.com",
"baseUrlHint": "Tessera only reads the public status page of this address. No login data is needed.",
"logo": "Logo",
"logoNone": "No logo",
"logoUpload": "Upload image",
"logoUrl": "Image address",
"logoUrlPlaceholder": "https://www.example.com/logo.png",
"logoUrlHint": "Addresses starting with https:// are loaded directly by your browser. An image at an http:// address is fetched once by Tessera when you save and stored like an uploaded image. For images that can only be reached internally, please use “Upload image”.",
"logoFileHint": "PNG, JPEG, GIF or WebP, at most 1 MB.",
"logoCurrent": "Current logo",
"logoRemove": "Remove logo",
"save": "Save",
"saving": "Checking …",
"cancel": "Cancel",
"delete": "Remove cloud",
"deleteConfirm": "Do you really want to remove the cloud “{name}”?",
"deleteConfirmYes": "Remove permanently",
"saveError": "The cloud could not be saved.",
"deleteError": "The cloud could not be removed.",
"close": "Close dialog",
"errors": {
"customerNameRequired": "Please enter a customer name.",
"customerNameTooLong": "The customer name may be at most 120 characters long.",
"baseUrlRequired": "Please enter the address of the cloud.",
"baseUrlInvalid": "Please enter a valid address starting with http:// or https://.",
"logoUrlInvalid": "Please enter a valid image address starting with http:// or https://.",
"logoFileInvalid": "Please upload a PNG, JPEG, GIF or WebP image of at most 1 MB.",
"logoFileTooLarge": "The file is larger than 1 MB.",
"logoFetchInternal": "This image address can only be reached internally. Tessera only fetches images from the internet. Please use “Upload image” instead.",
"logoFetchUnreachable": "The image could not be retrieved from this address. Please check the address or use “Upload image”.",
"logoFetchNotImage": "There is no PNG, JPEG, GIF or WebP image at this address.",
"logoFetchTooLarge": "The image at this address is larger than 1 MB.",
"notFound": "This cloud no longer exists. Please reload the page."
}
},
"widget": {
"loading": "Loading status …",
"loadError": "Status could not be loaded",
"empty": "No cloud added yet",
"allGood": "All clouds are up to date",
"countsLabel": "Number of clouds per traffic-light color",
"open": "Open Nextcloud status"
}
},
"controlCenter": {
"navLabel": "Settings and administration",
"settingsTitle": "Settings",
"adminTitle": "Administration",
"groups": {
"people": "Users and access",
"modules": "Modules",
"connections": "Connections"
},
"items": {
"account": "Account",
"widgets": "Widgets",
"calendar": "Calendar",
"myLinks": "Custom modules",
"desktop": "Desktop app",
"users": "Users",
"groups": "Groups",
"welcomeMail": "Welcome mail",
"tenants": "Tenants",
"modules": "Modules",
"grants": "Permissions",
"categories": "Categories",
"sharedLinks": "Custom modules for everyone",
"directory": "Directory (LDAP)",
"mailServer": "Email delivery (SMTP)"
},
"descriptions": {
"account": "Profile picture, accent colour and password of your Tessera account.",
"widgets": "Content and appearance of the widgets on your dashboard.",
"calendar": "Calendars whose events appear in the calendar widget.",
"desktop": "Tessera as its own program with an icon in the system tray.",
"smtp": "Tessera sends all emails through this server, for example welcome mails, reminders and notifications.",
"users": "Accounts, roles and access for everyone who uses Tessera.",
"groups": "Groups bundle users so you can grant modules to many people at once.",
"tenants": "Organisations that use this Tessera installation separately from one another.",
"modules": "Turn modules on or off for everyone. Who may use a module is set under Permissions.",
"grants": "Choose which groups may use or manage each module.",
"categories": "Decide how modules are grouped and sorted in the sidebar and in the marketplace. The setting applies to all users.",
"ldap": "Tessera takes over users and groups from your Active Directory. Tessera only reads there and never changes anything."
},
"smtp": {
"server": "Server",
"serverHelp": "Address and login of the outgoing mail server Tessera sends through.",
"sender": "Sender and recipients",
"senderHelp": "Which address Tessera writes from and where bug reports go.",
"check": "Check and save",
"checkHelp": "Test the settings before saving them. The test uses the values in this form."
},
"ldap": {
"connectionHelp": "Where Tessera reaches your Active Directory and which account it uses to read it.",
"fieldMappingHelp": "Which directory entry is copied into which field of the Tessera account.",
"schedule": "Schedule",
"scheduleHelp": "How often Tessera syncs with the directory on its own, and whether the connection is switched on. 0 minutes means manual only.",
"syncHelp": "Syncs users and groups with the directory right away, without waiting for the schedule."
},
"welcomeMail": {
"textsTitle": "Mail texts"
},
"calendar": {
"sourcesTitle": "Calendar sources"
}
},
"domains": {
"title": "Domains",
"description": "Register domains with AutoDNS, assign contacts and customers",
"environment": {
"demo": "Demo system (test mode)",
"live": "Live system – registrations cost money",
"notConfigured": "AutoDNS not set up"
},
"tabs": {
"domains": "Domains",
"contacts": "Contacts",
"customers": "Customers",
"register": "Register",
"orders": "Orders",
"settings": "Settings"
},
"notConfigured": {
"title": "AutoDNS is not set up yet.",
"managerHint": "Enter the user name, password and context of the selected system in the settings.",
"goToSettings": "Go to settings",
"userHint": "Please ask an administrator or someone with the Manage permission level."
},
"settings": {
"loading": "Loading settings …",
"save": "Save",
"saving": "Saving …",
"saved": "Saved.",
"system": {
"title": "System",
"description": "Choose whether Tessera works with the AutoDNS test system or with the real AutoDNS system.",
"demo": "Demo system (test mode)",
"demoHelp": "For trying things out. No real registrations are made here.",
"live": "Live system (billable)",
"liveHelp": "Registrations are binding and cost money.",
"confirmText": "From now on, registrations run through the AutoDNS live system and cost money.",
"confirm": "Use live system",
"cancel": "Cancel"
},
"access": {
"demoTitle": "Demo system access",
"liveTitle": "Live system access",
"description": "You receive these details from AutoDNS. The password is stored encrypted and is never shown again.",
"user": "User name",
"password": "Password",
"passwordStored": "Stored – leave empty to keep it",
"context": "Context",
"contextHelp": "Use a dedicated AutoDNS user for Tessera without two-factor sign-in.",
"contextInvalid": "The context must be a whole number greater than 0.",
"test": "Test connection",
"testing": "Testing connection …",
"saveFirst": "Please save first"
}
},
"common": {
"customerFilter": "Customer",
"allCustomers": "All customers",
"unassigned": "Unassigned",
"groupByCustomer": "Group by customer",
"loading": "Loading …",
"truncated": "Only the first 2000 entries are shown.",
"requestFailed": "The request failed. Please try again."
},
"domainList": {
"search": "Search domains",
"refresh": "Reload from AutoDNS",
"empty": "No domains were found at AutoDNS.",
"emptyFiltered": "No domain matches your selection.",
"unassigned": "Unassigned",
"cancelPending": "Cancellation pending",
"groupCount": "{count, plural, one {# domain} other {# domains}}",
"columns": {
"domain": "Domain",
"customer": "Customer",
"owner": "Owner",
"expires": "Expiry date",
"status": "Status"
},
"status": {
"ACTIVE": "Active",
"PENDING": "In progress",
"HOLD": "On hold (registry)",
"LOCK": "Locked"
}
},
"contactList": {
"intro": "All contacts that exist at AutoDNS in the selected system appear here. Assign them to a customer so that domains show up under the right customer.",
"search": "Search contacts",
"refresh": "Re-read from AutoDNS",
"newContact": "New contact",
"empty": "No contacts were found at AutoDNS.",
"emptyFiltered": "No contact matches your selection.",
"groupCount": "{count, plural, one {# contact} other {# contacts}}",
"columns": {
"name": "Name",
"organization": "Organisation",
"city": "City",
"email": "E-mail",
"customer": "Customer"
},
"selectContact": "Select contact {name}",
"selectAllVisible": "Select all shown",
"selectedCount": "{count, plural, =0 {Nothing selected} other {# selected}}",
"assignLabel": "Assign selected to",
"assignPlaceholder": "Choose customer …",
"removeAssignment": "Remove assignment",
"assign": "Assign",
"assigned": "The assignment was saved.",
"created": "The contact was created at AutoDNS."
},
"contactForm": {
"title": "New contact",
"type": "Type",
"person": "Person",
"org": "Company or organisation",
"organization": "Organisation",
"fname": "First name",
"lname": "Last name",
"street": "Street and house number",
"street2": "Second address line (optional)",
"pcode": "Postal code",
"city": "City",
"country": "Country",
"phone": "Phone",
"phoneHint": "International format, e.g. +49 30 123456",
"email": "E-mail",
"customer": "Customer (optional)",
"noCustomer": "No customer",
"save": "Save",
"saving": "Saving …",
"cancel": "Cancel",
"errors": {
"required": "Please fill in this field.",
"email": "Please enter a valid e-mail address.",
"phone": "Please use the international format, e.g. +49 30 123456."
}
},
"customers": {
"intro": "Customers group AutoDNS contacts. A domain appears under the customer of its owner. Add your own company as a customer too and mark it.",
"addTitle": "Add customer",
"name": "Name",
"ownCompanyLabel": "This is our own company",
"ownCompany": "Own company",
"add": "Add customer",
"empty": "No customers have been added yet.",
"contactCount": "{count, plural, =0 {No contacts} one {# contact} other {# contacts}}",
"edit": "Edit",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"confirmDelete": "Really delete customer “{name}”?",
"confirmDeleteYes": "Delete permanently"
},
"register": {
"intro": "Check whether a domain is available, choose the contacts, and register the domain with AutoDNS as a binding order. Tessera takes the name servers from AutoDNS.",
"domainLabel": "Domain",
"domainPlaceholder": "example.com",
"check": "Check availability",
"checking": "Checking …",
"free": "{domain} is available.",
"price": "Price for one year: {price}",
"priceUnknown": "Price could not be determined",
"notFree": "{domain} is not available and cannot be registered.",
"notFreeStatus": "Registry response: {status}",
"contactsTitle": "Contacts",
"contactsDescription": "Choose a contact from AutoDNS for each role. The owner is required; the admin, technical and zone contacts are preselected and can be changed.",
"contactsLoading": "Loading contacts …",
"contactsEmpty": "There are no contacts at AutoDNS yet. Create a contact under “Contacts” first.",
"choose": "Please choose …",
"roles": {
"owner": "Owner",
"admin": "Admin contact",
"tech": "Technical contact",
"zone": "Zone contact"
},
"nameServersTitle": "Name servers",
"nameServersDescription": "These default name servers are stored in AutoDNS. Tessera uses them unchanged and in this order; they can only be changed in AutoDNS.",
"nameServer": "Name server {number}",
"nameServersLoading": "Reading name servers from AutoDNS …",
"nameServersMissing": "No default name servers are stored in AutoDNS. Please store at least two name servers as the default in AutoDNS. Until then, registration is not possible.",
"nameServersUnreadable": "Tessera could not read the default name servers from AutoDNS. Until that works, registration is not possible.",
"nameServersRetry": "Read from AutoDNS again",
"nameServersBlocked": "Without default name servers from AutoDNS, registration is not possible – see the notice above.",
"showSummary": "Show summary",
"creating": "Preparing …",
"summary": {
"title": "Summary",
"description": "Please check all details. The button below makes the registration binding.",
"system": "System",
"domain": "Domain",
"period": "Term",
"periodValue": "1 year",
"price": "Price",
"nameServers": "Name servers"
},
"confirmLive": "I confirm the binding registration with AutoDNS, which costs money.",
"confirmDemo": "I confirm the registration in the AutoDNS demo system (test mode).",
"submit": "Register now (binding)",
"submitting": "Submitting …",
"cancel": "Cancel",
"canceling": "Discarding …",
"back": "Back",
"submitFailed": "The registration could not be submitted. Please check under “Orders” before you try again.",
"result": {
"title": "Result",
"SUBMITTED": "The registration was handed to AutoDNS and is being processed. You can follow the progress under “Orders”.",
"SUCCESS": "The domain was registered.",
"FAILED": "AutoDNS did not carry out the registration.",
"UNKNOWN": "Outcome unclear",
"unknownAdvice": "Tessera could not determine whether AutoDNS accepted the registration. Please do not order the domain again. Check under “Orders”: Tessera compares the order with AutoDNS there.",
"toOrders": "Go to orders",
"another": "Register another domain"
}
},
"orders": {
"intro": "Every registration and its state. Tessera compares open orders with AutoDNS when you open this page and every 30 seconds afterwards.",
"refresh": "Refresh",
"refreshing": "Comparing …",
"loading": "Loading orders …",
"empty": "There are no orders yet.",
"columns": {
"domain": "Domain",
"system": "System",
"status": "Status",
"confirmed": "Confirmed"
},
"environment": {
"DEMO": "Demo",
"LIVE": "Live"
},
"status": {
"DRAFT": "Draft",
"SUBMITTING": "Submitting",
"SUBMITTED": "In progress",
"SUPPORT": "Query pending",
"SUCCESS": "Registered",
"FAILED": "Failed",
"UNKNOWN": "Outcome unclear",
"CANCELED": "Discarded"
},
"confirmedBy": "{user}, {date}",
"notConfirmed": "–",
"supportHint": "AutoDNS has a query about this order. Please contact AutoDNS or InterNetX.",
"unknownUnchecked": "Tessera has not checked with AutoDNS yet. Click “Refresh”. Please do not order the domain again.",
"unknownChecked": "AutoDNS found neither the domain nor a matching order. For safety, check in AutoDNS itself before you discard the order.",
"discard": "Discard",
"confirmDiscard": "Really discard this draft?",
"confirmDiscardUnknown": "Only discard this order after you have checked in AutoDNS that the domain was not ordered. Otherwise it could be ordered twice.",
"discardYes": "Yes, discard",
"discardNo": "Cancel"
},
"errors": {
"request": "The request failed. Please try again.",
"loadStatus": "The state of the AutoDNS connection could not be loaded."
}
},
"nextcloudFiles": {
"title": "Files",
"description": "View, upload, download and organise the files in your Nextcloud.",
"tabs": {
"files": "Files",
"settings": "Settings",
"sharedByMe": "Shared by me",
"sharedWithMe": "Shared with me"
},
"notConfigured": {
"title": "Nextcloud has not been set up yet.",
"managerHint": "Enter the address of your Nextcloud in the settings.",
"userHint": "Please contact an administrator. Only an administrator can enter the Nextcloud address.",
"goToSettings": "Go to settings"
},
"connect": {
"title": "Connect to Nextcloud",
"expiredNotice": "Your connection to Nextcloud has expired or was revoked in Nextcloud. Please sign in again.",
"explanation": "Sign in with your Nextcloud account.",
"privacy": "Tessera does not store your password. It asks Nextcloud for a separate access that you can revoke in Nextcloud at any time.",
"loginName": "User name or email",
"password": "Password",
"submit": "Sign in",
"submitting": "Signing in …",
"or": "or",
"browser": "Sign in with the browser",
"starting": "Starting …",
"browserHint": "For accounts with two-factor authentication",
"waiting": {
"instruction": "Open the Nextcloud sign-in, log in there and confirm with “Grant access”.",
"open": "Open sign-in at Nextcloud",
"status": "Waiting for confirmation in Nextcloud …",
"cancel": "Cancel"
},
"errors": {
"generic": "Signing in failed. Please try again.",
"credentialsOrTwoFactor": "Signing in did not work. Either the user name or password is wrong, or your account uses two-factor authentication. In that case, please sign in with the browser.",
"useBrowserLogin": "Nextcloud does not allow password sign-in for this account. Please sign in with the browser.",
"tooManyAttempts": "Too many failed attempts. Please wait {minutes, plural, one {# minute} other {# minutes}}.",
"nextcloudLocked": "Nextcloud is temporarily blocking requests from the Tessera server. Please try again in {minutes, plural, one {# minute} other {# minutes}}.",
"flowExpired": "The sign-in has expired. Please start it again.",
"nextcloudUnavailable": "Nextcloud is unreachable or did not answer in time.",
"tooManyFlows": "Too many browser sign-ins are running right now. Please try again in a moment."
}
},
"account": {
"signedInAs": "Signed in as {name}",
"disconnect": "Sign out",
"disconnectFailed": "The connection could not be removed. Please try again.",
"confirm": {
"title": "Disconnect from Nextcloud?",
"body": "Tessera forgets the access. Your files in Nextcloud stay unchanged.",
"confirm": "Disconnect",
"cancel": "Cancel"
}
},
"errors": {
"request": "The request failed. Please try again.",
"loadStatus": "The state of the Nextcloud connection could not be loaded."
},
"settings": {
"save": "Save",
"saving": "Saving …",
"saved": "Saved.",
"address": {
"title": "Nextcloud address",
"description": "Enter the address the way your users open Nextcloud in the browser, for example https://cloud.your-company.com. Internal addresses are allowed.",
"label": "Address",
"placeholder": "https://cloud.your-company.com",
"test": "Check connection",
"testing": "Checking …",
"connectedUsers": "{count, plural, =0 {Nobody is connected right now.} one {One user is connected.} other {# users are connected.}}",
"adminOnly": "The address is set by an administrator. You can view it here and check the connection.",
"insecure": "Caution: with http://, passwords travel across the network unencrypted, including the Nextcloud password users enter when signing in. Use https:// whenever possible."
},
"reconnect": {
"message": "{count, plural, one {One user is connected. After the change they have to sign in again.} other {# users are connected. After the change everyone has to sign in again.}}",
"confirm": "Change address",
"cancel": "Cancel"
},
"hints": {
"title": "Notes for the Nextcloud administration",
"description": "So that signing in works reliably for everyone.",
"whitelist": "All Tessera users reach Nextcloud from the same address, that of the Tessera server. Several failed sign-ins make Nextcloud block this address for everyone. Add the address of the Tessera server to the allow list of the brute-force protection:",
"https": "Use https where possible. Certificates are verified; a private certificate authority has to be installed on the Tessera server.",
"trustedDomains": "The host name of the address has to be listed in the trusted domains (trusted_domains) of Nextcloud.",
"twoFactor": "Users with two-factor authentication connect through the browser; signing in with a password is not enough for them."
}
},
"browser": {
"rootName": "All files",
"regionLabel": "Files",
"breadcrumb": {
"label": "Folder path",
"more": "More folders"
},
"toolbar": {
"newFolder": "New folder",
"upload": "Upload",
"view": "View",
"viewList": "List",
"viewGrid": "Grid",
"sortBy": "Sort by",
"sortAscending": "Ascending",
"sortDescending": "Descending",
"reload": "Reload",
"readOnly": "View only"
},
"sort": {
"name": "Name",
"size": "Size",
"modified": "Modified"
},
"columns": {
"name": "Name",
"size": "Size",
"modified": "Modified",
"actions": "Actions",
"selectAll": "Select all",
"select": "Select “{name}”"
},
"selection": {
"count": "{count} selected",
"download": "Download",
"move": "Move",
"delete": "Delete",
"clear": "Clear selection"
},
"menu": {
"label": "Actions for “{name}”",
"open": "Open",
"download": "Download",
"downloadZip": "Download as ZIP",
"rename": "Rename",
"move": "Move",
"share": "Share",
"openInNextcloud": "Open in Nextcloud",
"delete": "Delete"
},
"empty": {
"title": "This folder is empty.",
"hint": "Drag files here or upload them.",
"readOnlyHint": "Nothing can be added here."
},
"loading": "Loading folder …",
"folderSize": "Folder",
"unreachable": "Nextcloud cannot be reached right now.",
"unreachableHint": "Check that Nextcloud is running, then try again.",
"retry": "Try again",
"folderGone": "The folder no longer exists. You are back at all files.",
"locked": "Nextcloud is temporarily blocking requests from the Tessera server. Please try again in {minutes, plural, one {# minute} other {# minutes}}.",
"truncated": "Showing the first 5000 entries.",
"count": "{count, plural, =0 {No items} one {# item} other {# items}}",
"quota": {
"label": "Storage",
"ofTotal": "{used} of {total} used",
"usedOnly": "{used} used"
},
"drop": {
"target": "Drop into “{name}”",
"hint": "Folders are uploaded with their contents.",
"tooMany": "Too many files at once. Drop at most 2000 files in one go.",
"tooDeep": "The folders are nested too deeply. More than 20 levels cannot be dropped.",
"unreadable": "The dropped files could not be read. Please try again.",
"readOnly": "You may not drop files into this folder."
},
"status": {
"deleted": "{count, plural, one {“{name}” is in the trash.} other {# items moved to the trash.}}",
"moved": "{count, plural, one {“{name}” moved to “{target}”.} other {# items moved to “{target}”.}}",
"renamed": "Renamed to “{name}”.",
"folderCreated": "Folder “{name}” created.",
"failed": "{failed, plural, one {One item could not be processed} other {# items could not be processed}}: {reason}",
"downloadFailed": "Download not possible: {reason}",
"zipTooMany": "Too many entries for one ZIP file. Select fewer entries or download the whole folder."
}
},
"dialogs": {
"cancel": "Cancel",
"close": "Close",
"newFolder": {
"title": "New folder",
"label": "Folder name",
"submit": "Create",
"defaultName": "New folder"
},
"rename": {
"title": "Rename",
"label": "New name",
"submit": "Rename"
},
"busy": "One moment …",
"nameProblems": {
"empty": "Please enter a name.",
"dots": "“.” and “..” are not allowed as a name.",
"slash": "The name must not contain a slash.",
"part": "Nextcloud uses names ending in “.part” itself. Please choose another one.",
"tooLong": "The name is too long. At most 250 characters are allowed."
},
"move": {
"title": "{count, plural, one {Move “{name}”} other {Move # items}}",
"hint": "Choose the folder to move to.",
"submit": "Move here",
"noFolders": "There are no subfolders here.",
"sameFolder": "The selection is already in this folder.",
"intoItself": "A folder cannot be moved into itself.",
"openFolder": "Open folder “{name}”"
},
"delete": {
"titleOne": "Delete “{name}”?",
"titleMany": "Delete {count} items?",
"body": "The items go to the trash of your Nextcloud and can be restored there.",
"confirm": "Move to trash"
}
},
"transfers": {
"title": "Transfers",
"active": "{count, plural, one {# running} other {# running}}",
"allDone": "All done",
"waiting": "{count, plural, one {# question open} other {# questions open}}",
"failed": "{count, plural, one {# failed} other {# failed}}",
"collapse": "Collapse transfers",
"expand": "Expand transfers",
"clearFinished": "Remove finished",
"progress": "{loaded} of {total}",
"queued": "Waiting",
"assembling": "Nextcloud is assembling the file …",
"done": "Uploaded",
"skipped": "Skipped",
"cancel": "Cancel",
"cancelLabel": "Cancel uploading “{name}”",
"retry": "Try again",
"target": "Destination: {folder}",
"conflict": {
"text": "“{name}” already exists in the folder.",
"replace": "Replace",
"keepBoth": "Keep both",
"skip": "Skip"
}
},
"share": {
"title": "Share “{name}”",
"loading": "Loading shares …",
"done": "Done",
"hidden": "{count, plural, one {One more share, for example by email, is only visible in Nextcloud.} other {# more shares, for example by email, are only visible in Nextcloud.}}",
"people": {
"title": "People and groups",
"searchLabel": "Search for a person or group",
"searchPlaceholder": "Enter a name",
"newAccess": "Permission for the next share",
"searching": "Searching …",
"minChars": "Enter at least {count} characters.",
"noResults": "Nobody found.",
"results": "Search results",
"group": "Group",
"alreadyShared": "already shared",
"empty": "Not shared with anyone yet.",
"accessFor": "Permission for {name}",
"remove": "Remove share for {name}",
"expires": "valid until {date}"
},
"access": {
"view": "View",
"edit": "Edit",
"upload": "Upload only",
"custom": "Custom permission"
},
"indicator": {
"outgoing": "Open shares of “{name}”",
"incoming": "Shared with you"
},
"link": {
"title": "Link",
"empty": "No link created yet.",
"defaultName": "Link",
"create": "Create link",
"createMore": "Create another link",
"withPassword": "with password",
"urlLabel": "Link address",
"copy": "Copy link",
"copied": "Copied",
"edit": "Change",
"editAria": "Change link “{name}”",
"delete": "Delete",
"deleteAria": "Delete link “{name}”",
"deleteConfirm": "Delete link? Anyone who has it will no longer reach “{name}”.",
"deleteYes": "Yes, delete",
"deleteNo": "Cancel",
"passwordNote": "Pass the password on separately from the link. Tessera cannot show it again later.",
"passwordOfLink": "Password of the link",
"copyPassword": "Copy password",
"passwordCopied": "Copied",
"passwordDone": "Got it"
},
"linkForm": {
"titleCreate": "Create link",
"titleEdit": "Change link",
"accessLegend": "What may others do?",
"accessHint": {
"view": "Others see the content and can download it.",
"edit": "Others may change, add and delete files in the folder.",
"editFile": "Others may change the file.",
"upload": "Others put files into this folder but cannot see anything in it."
},
"protect": "Protect with a password",
"passwordLabel": "Password",
"passwordRequiredLabel": "Password (your Nextcloud requires one)",
"generate": "Generate password",
"show": "Show",
"hide": "Hide",
"copyPassword": "Copy password",
"passwordCopied": "Copied",
"minLength": "At least {count} characters.",
"hasPassword": "The link has a password.",
"willRemove": "The password is removed when you save.",
"change": "Change password",
"remove": "Remove password",
"keep": "Keep password",
"expiryLabel": "Expiry date",
"expiryRequiredLabel": "Expiry date (your Nextcloud requires one)",
"expirySet": "Set an expiry date",
"expiryNone": "No expiry date",
"expiryMax": "At the latest on {date}.",
"expiryOutOfRange": "Your Nextcloud does not allow this date.",
"labelLabel": "Label (optional)",
"labelHint": "Helps you tell several links apart.",
"cancel": "Cancel",
"submitCreate": "Create link",
"submitSave": "Save",
"currentAccess": "Current: {level}"
}
},
"codes": {
"lengthRequired": "The size of the file could not be determined. Please try again.",
"chunkTooLarge": "A part of the file was too large. Please reload the page and try again.",
"fileTooLarge": "The file is larger than Nextcloud accepts.",
"changedMeanwhile": "The file was changed in Nextcloud in the meantime. Try again to decide anew.",
"nameTaken": "An item with this name already exists.",
"quotaExceeded": "Not enough storage in your Nextcloud.",
"quotaExceededFree": "Not enough storage in your Nextcloud. {free} are still free.",
"nextcloudLocked": "Nextcloud is temporarily blocking requests from the Tessera server. Please try again in {minutes, plural, one {# minute} other {# minutes}}.",
"connectionExpired": "The connection to Nextcloud has expired. Please sign in again.",
"aborted": "Cancelled.",
"network": "The connection was interrupted. Please check your network and try again.",
"notFound": "The item no longer exists.",
"moveIntoItself": "A folder cannot be moved into itself.",
"invalidName": "This name is not allowed.",
"invalidPath": "This name is not allowed.",
"nextcloudUnavailable": "Nextcloud cannot be reached or does not respond in time.",
"generic": "That did not work. Please try again.",
"selectionTooLarge": "Too many entries for one ZIP file. Select fewer entries or download the whole folder.",
"sharingDisabled": "Sharing is switched off in your Nextcloud.",
"sharingDisabledGroups": "Sharing with groups is switched off in your Nextcloud.",
"linkSharingDisabled": "Public links are switched off in your Nextcloud.",
"shareAccessInvalid": "This permission is not possible for this item.",
"shareRecipientInvalid": "Your Nextcloud does not know this person or group.",
"shareAlreadyExists": "The item is already shared this way. Change the existing share instead.",
"sharePasswordRequired": "Your Nextcloud requires a password for links.",
"sharePasswordRejected": "Nextcloud rejects this password. Please choose a longer or less common password.",
"shareExpiryRequired": "Your Nextcloud requires an expiry date for links.",
"shareExpiryInvalid": "Your Nextcloud does not allow this expiry date. It must not be in the past or after the latest permitted date.",
"shareRejected": "Nextcloud rejected this share.",
"shareNotFound": "This share no longer exists.",
"tooManyShares": "You have created many shares in a short time. Please wait {minutes, plural, one {# minute} other {# minutes}}.",
"ncDetail": "Message from Nextcloud: {detail}"
},
"sharesView": {
"loading": "Loading shares …",
"byMeEmpty": "You have not shared anything yet. Open the menu of a file or folder in the “Files” tab and choose “Share”.",
"withMeEmpty": "Nobody has shared anything with you yet.",
"inFolder": "in {folder}",
"rootFolder": "Main folder",
"sharedWith": "Shared with {list}",
"linkRecipient": "Link",
"groupRecipient": "Group {name}",
"from": "from {name}",
"manage": "Manage shares",
"manageAria": "Manage shares of “{name}”",
"showInFolder": "Show in folder",
"showInFolderAria": "Show “{name}” in its folder",
"open": "Open",
"openAria": "Open “{name}”",
"leave": "Leave share",
"leaveAria": "Leave share “{name}”",
"leaveConfirm": "Stop having “{name}” shared with you? The item disappears from your Nextcloud.",
"leaveYes": "Yes, leave",
"leaveNo": "Cancel",
"pendingTitle": "Not accepted yet",
"acceptedTitle": "Accepted",
"accept": "Accept",
"acceptAria": "Accept “{name}”",
"decline": "Decline",
"declineAria": "Decline “{name}”",
"truncated": "Not all shares are shown. You see the rest in Nextcloud.",
"reload": "Reload",
"reshared": "Passed on by you, owner: {owner}"
}
}
}