Files
tessera-ctl/apps/web/src/messages/en.json
T
schalli 714f731ac9
Tessera CI/CD / Lint & Type Check (push) Successful in 51s
Tessera CI/CD / Tests (push) Successful in 1m29s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 19s
Tessera CI/CD / Build & Publish Images (push) Successful in 4m14s
feat(admin): Anmeldehinweise der Willkommensmail in der Vorlage bearbeitbar
Neue Felder loginHintDirectory/loginHintLocal (Platzhalter, Pflicht, max. 1000),
Migration 20260930170000 (nullable, leer = Standard aus @tessera/shared).
Knopf Passwort festlegen und Gueltigkeitshinweis bleiben fest; local-no-link
wird nie erzeugt und bleibt fest. Vorschau springt beim Bearbeiten auf die
passende Kontoart. Lokal im Browser nachgewiesen.

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

1560 lines
68 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",
"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": "SMTP Configuration",
"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.",
"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"
},
"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:"
}
},
"admin": {
"users": {
"title": "User Management",
"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 for this tenant.",
"directCheckboxLabel": "{granted, select, true {Grant} other {Revoke}} {module} directly for {user}",
"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": "LDAP configuration",
"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}"
}
},
"customModules": {
"title": "Custom modules",
"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 your tenant 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 four 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 tenant",
"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 tenant. The “Set password” link is only an example in the preview."
}
}
},
"adminModules": {
"title": "Module Management",
"description": "Activate or deactivate modules for your tenant",
"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",
"grants": {
"title": "Grants Matrix",
"searchPlaceholder": "Search modules or groups...",
"emptyModules": "No modules are activated for this tenant yet. Activate a module under Modules first.",
"emptyModulesLink": "Go to Modules",
"adminNote": "ADMIN and SUPER_ADMIN always have access to all active modules — this matrix only applies to the USER role.",
"saveError": "Could not save grant. Please try again.",
"noSearchResults": "No match for \"{search}\" — neither in the modules nor in the groups."
},
"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 for your tenant",
"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.",
"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"
},
"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 only available to administrators.",
"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 for your tenant",
"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} for this tenant? The module will be removed from the sidebar.",
"deactivateDialogConfirm": "Deactivate",
"deactivateDialogCancel": "Cancel",
"tenantContextLabel": "Tenant Context",
"backToMarketplace": "Back to Marketplace",
"detailVersion": "Version {version}",
"detailStatusActive": "Activated for this tenant",
"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": "Inspect, split, merge and convert certificates.",
"tabs": {
"inspect": "Inspect",
"split": "Split",
"merge": "Merge",
"convert": "Convert"
},
"dropZone": {
"placeholder": "Drag file here or click to browse",
"formats": ".pem, .crt, .cer, .der, .pfx, .p12, .p7b, .p7c"
},
"paste": {
"placeholder": "Paste PEM content (-----BEGIN ...)"
},
"password": {
"label": "Password (PFX/P12)"
},
"or": "or",
"actions": {
"inspect": "Inspect",
"split": "Split",
"merge": "Merge",
"convert": "Convert",
"download": "Download",
"downloadZip": "Download all as ZIP",
"processing": "Processing...",
"zipFilename": "certificates.zip"
},
"certRole": {
"root": "Root CA",
"intermediate": "Intermediate CA",
"end-entity": "Certificate"
},
"emptyState": {
"inspect": "No certificate loaded.",
"inspectBody": "Upload a file or paste PEM text.",
"split": "No file loaded.",
"splitBody": "Upload a fullchain or P7B file.",
"merge": "No certificates selected.",
"mergeBody": "Upload at least two files.",
"convert": "No file loaded.",
"convertBody": "Upload a file and select an output format."
},
"error": {
"generic": "Processing failed. Check the file format or password.",
"wrongPassword": "Wrong password. Could not decrypt the PFX/P12 file.",
"unknownFormat": "Unknown format. The file could not be recognized as a certificate."
}
},
"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 equally to all tenants, not configurable per tenant.",
"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 …",
"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."
}
},
"moduleCategories": {
"domain-tools": "Domains",
"security-tools": "Security",
"fleet": "Fleet",
"infrastructure": "Infrastructure",
"procurement": "Procurement",
"custom-modules": "Custom modules"
}
}