a217d606bb
- Zeilen nach down, warn, ok, idle, orphan mit genau einer Kennzahl, unbekannt statt 0 - config.serverIds filtert Liste und Balken, nur geloeschte Kennungen: eigener Satz - Ansichtsmodus Links auf /modules/proxmox, Bearbeitungsmodus ohne Links - Groessenstufen per Container-Query, Nachladen alle 60 s, pausiert bei verborgenem Tab - formatPercent/formatCount einmal in components/proxmox, ServerCard nutzt sie Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1291 lines
56 KiB
JSON
1291 lines
56 KiB
JSON
{
|
||
"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."
|
||
}
|
||
},
|
||
"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."
|
||
}
|
||
}
|
||
}
|