{ "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" }, "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." } }, "header": { "search": "Search...", "userMenu": "User menu", "breadcrumb": { "home": "Home" }, "settings": "Settings", "logout": "Sign Out", "admin": { "label": "Administration", "users": "Users", "tenants": "Tenants", "modules": "Modules", "ldap": "LDAP", "smtp": "SMTP", "groups": "Groups" }, "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" }, "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", "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." } }, "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", "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": "Back", "monthNext": "Next", "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" }, "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.", "iconUploadedHint": "A custom icon has been uploaded for this favorite.", "iconRemoveButton": "Remove uploaded icon", "iconUrlUnreachable": "The image at this address could not be loaded. The site likely blocks automated requests (for example via a Cloudflare check) or is unreachable. Please upload the icon instead.", "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" } }, "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", "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." } }, "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}" } } }, "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." } } }