2026-02-04 23:31:53 +01:00
{
"Login" : "Login" ,
2026-03-07 21:21:47 +01:00
"Login credentials" : "Login credentials" ,
2026-04-22 16:30:03 +02:00
"Login provider" : "Login provider" ,
2026-04-22 17:25:07 +02:00
"Open full page" : "Open full page" ,
"Loading" : "Loading" ,
"Failed to load" : "Failed to load" ,
2026-02-04 23:31:53 +01:00
"Register" : "Register" ,
"Password" : "Password" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Or" : "Or" ,
2026-02-04 23:31:53 +01:00
"Forgot password" : "Forgot password" ,
"Remember me" : "Remember me" ,
"Clear login tokens" : "Clear login tokens" ,
"Clear all login tokens for this user?" : "Clear all login tokens for this user?" ,
"Login tokens cleared" : "Login tokens cleared" ,
"Send access" : "Send access" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Access PDF" : "Access PDF" ,
"Download access PDFs" : "Download access PDFs" ,
"Generate access PDFs for selected users?" : "Generate access PDFs for selected users?" ,
"Too many users selected" : "Too many users selected" ,
"No valid users selected" : "No valid users selected" ,
"Failed to generate access PDF" : "Failed to generate access PDF" ,
"ZIP support missing (ext-zip)" : "ZIP support missing (ext-zip)" ,
2026-02-04 23:31:53 +01:00
"Send access email to this user?" : "Send access email to this user?" ,
"Access email sent" : "Access email sent" ,
"Access email failed" : "Access email failed" ,
"Your access details" : "Your access details" ,
"Reset password" : "Reset password" ,
"Verification code" : "Verification code" ,
"Verify code" : "Verify code" ,
"Verify" : "Verify" ,
"Send code" : "Send code" ,
"Send code again" : "Send code again" ,
"Enter your email address and we will send you a verification code." : "Enter your email address and we will send you a verification code." ,
"Enter the verification code we sent to your email." : "Enter the verification code we sent to your email." ,
"Please enter a valid email address" : "Please enter a valid email address" ,
"Please enter the 6-digit code" : "Please enter the 6-digit code" ,
"Invalid or expired code" : "Invalid or expired code" ,
"Code verified" : "Code verified" ,
"Password reset code" : "Password reset code" ,
"If the email exists, a verification code has been sent." : "If the email exists, a verification code has been sent." ,
"Choose a new password for your account." : "Choose a new password for your account." ,
"Password updated" : "Password updated" ,
"Password can not be updated" : "Password can not be updated" ,
2026-02-24 08:49:40 +01:00
"Profile can not be updated" : "Profile can not be updated" ,
2026-02-04 23:31:53 +01:00
"Reset request not found" : "Reset request not found" ,
"Reset request already used" : "Reset request already used" ,
"Reset request expired" : "Reset request expired" ,
"Username" : "Username" ,
"Admin" : "Admin" ,
"Logout" : "Logout" ,
"Account" : "Account" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Continue" : "Continue" ,
2026-03-07 22:54:33 +01:00
"Show password" : "Show password" ,
"Hide password" : "Hide password" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Use different email" : "Use different email" ,
2026-03-07 14:10:36 +01:00
"Back to login" : "Back to login" ,
2026-03-06 21:59:41 +01:00
"Encrypted connection" : "Encrypted" ,
"HTTPS/TLS 1.2+ in transit" : "HTTPS/TLS 1.2+ in transit" ,
"Problems logging in" : "Problems logging in" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"We could not continue with these login details" : "We could not continue with these login details" ,
"Too many login attempts. Please wait and try again." : "Too many login attempts. Please wait and try again." ,
"No login method is available for this tenant" : "No login method is available for this tenant" ,
"Cached" : "Cached" ,
2026-03-09 22:29:45 +01:00
"App identity" : "App identity" ,
"Configured" : "Configured" ,
"Not configured" : "Not configured" ,
"Theme policy" : "Theme policy" ,
"Brand color" : "Brand color" ,
"User override enabled" : "User override enabled" ,
"User override disabled" : "User override disabled" ,
"Token lifetime policy" : "Token lifetime policy" ,
"Token operations" : "Token operations" ,
"CORS allowlist" : "CORS allowlist" ,
"Shared Microsoft credentials" : "Shared Microsoft credentials" ,
"Authority endpoint" : "Authority endpoint" ,
"%d defaults configured" : "%d defaults configured" ,
"%d events enabled" : "%d events enabled" ,
"%d origins configured" : "%d origins configured" ,
"days" : "days" ,
"Leave empty to use the runtime default title." : "Leave empty to use the runtime default title." ,
"Leave empty to keep the currently stored client secret." : "Leave empty to keep the currently stored client secret." ,
"This setting controls the application name shown across the UI." : "This setting controls the application name shown across the UI." ,
"This setting controls the default language for users without a personal preference." : "This setting controls the default language for users without a personal preference." ,
"These defaults prefill tenant, department and role when new users are created." : "These defaults prefill tenant, department and role when new users are created." ,
"This setting controls the global default theme and whether users may choose their own theme." : "This setting controls the global default theme and whether users may choose their own theme." ,
"This setting controls the primary UI accent color for the default app theme." : "This setting controls the primary UI accent color for the default app theme." ,
"Telemetry helps detect recurring UI issues and failed requests in production." : "Telemetry helps detect recurring UI issues and failed requests in production." ,
"Limit which event types are collected to match your privacy and operations requirements." : "Limit which event types are collected to match your privacy and operations requirements." ,
"These limits define default and maximum lifetimes for newly issued API tokens." : "These limits define default and maximum lifetimes for newly issued API tokens." ,
"Define which origins may call your API from browsers. Use one origin per line." : "Define which origins may call your API from browsers. Use one origin per line." ,
"This action revokes all active API tokens immediately across all users." : "This action revokes all active API tokens immediately across all users." ,
"The authority URL defines the Microsoft identity tenant endpoint used for sign-in." : "The authority URL defines the Microsoft identity tenant endpoint used for sign-in." ,
"This will expire all remember-me tokens immediately and force users to sign in again." : "This will expire all remember-me tokens immediately and force users to sign in again." ,
2026-04-01 20:27:42 +02:00
"Global settings are stored in the database. storage/runtime/settings.php is only a runtime cache for selected app settings." : "Global settings are stored in the database. storage/runtime/settings.php is only a runtime cache for selected app settings." ,
2026-02-04 23:31:53 +01:00
"Create your account" : "Create your account" ,
"First name" : "First name" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Name" : "Name" ,
2026-02-04 23:31:53 +01:00
"Last name" : "Last name" ,
"Email" : "Email" ,
"Password (again)" : "Password confirm" ,
"Password requirements" : "Password requirements" ,
"At least %d characters" : "At least %d characters" ,
"At least one uppercase letter" : "At least one uppercase letter" ,
"At least one lowercase letter" : "At least one lowercase letter" ,
"At least one number" : "At least one number" ,
"At least one symbol" : "At least one symbol" ,
"Must not contain your email" : "Must not contain your email" ,
"Email/password not valid" : "Email or password is invalid" ,
"First name cannot be empty" : "First name cannot be empty" ,
"Last name cannot be empty" : "Last name cannot be empty" ,
"Email cannot be empty" : "Email cannot be empty" ,
"Email is not valid" : "Email is not valid" ,
"Password cannot be empty" : "Password cannot be empty" ,
"Passwords must match" : "Passwords must match" ,
"Password must be at least %d characters" : "Password must be at least %d characters" ,
"Password must include an uppercase letter" : "Password must include an uppercase letter" ,
"Password must include a lowercase letter" : "Password must include a lowercase letter" ,
"Password must include a number" : "Password must include a number" ,
"Password must include a symbol" : "Password must include a symbol" ,
"Password must not contain your email" : "Password must not contain your email" ,
"Email is already taken" : "Email is already taken" ,
"User can not be registered" : "User can not be registered" ,
"Language not supported" : "Language not supported" ,
"Language" : "Language" ,
"Sales" : "Sales" ,
"Master data" : "Master data" ,
"Organization" : "Organization" ,
"Roles & permissions" : "Roles & permissions" ,
"Permissions" : "Permissions" ,
"Permission key" : "Permission key" ,
"Create permission" : "Create permission" ,
"Edit permission" : "Edit permission" ,
2026-03-22 22:28:19 +01:00
"View permission" : "View permission" ,
2026-02-04 23:31:53 +01:00
"Delete this permission?" : "Delete this permission?" ,
"Permission created" : "Permission created" ,
"Permission updated" : "Permission updated" ,
"Permission deleted" : "Permission deleted" ,
"Permission not found" : "Permission not found" ,
"Permission can not be created" : "Permission can not be created" ,
"Permission can not be updated" : "Permission can not be updated" ,
"Permission key cannot be empty" : "Permission key cannot be empty" ,
"Permission key is invalid" : "Permission key is invalid" ,
"Permission key already exists" : "Permission key already exists" ,
"Assigned permissions" : "Assigned permissions" ,
"Select permissions" : "Select permissions" ,
2026-03-13 09:49:11 +01:00
"No permissions available" : "No permissions available" ,
feat(ui): token-select primitive for large multi-selects
Adds tokenSelectForm() in core/Support/helpers/ui.php: an inline
typeahead combobox + flat alphabetical removable list, designed for
selections that outgrow the chip-header of the vendor MultiSelect
(roles, permissions, and similar admin pickers).
Contract:
- Hidden <select multiple name="<name>[]"> is the form submission source —
consumers read via $request->body() verbatim, no parsing
- Items are ['id' => int, <labelKey> => string, 'key' => string?]
where labelKeys default to ['description', 'label', 'name']; 'key' is
an invisible fuzzy-match hint
- $labelOverrides lets callers swap emptyState / removeTooltip /
noMatches / clearAll / countSuffix / errorMessage with domain copy
- $disabled renders pure-presentation list (no combobox, no remove)
Runtime:
- initTokenSelect in web/js/components/app-token-select.js is registered
as 'token-select' in app-init.js; destroy()/cleanupFns contract
- Syncs the hidden <select> on every mutation and dispatches 'change'
so dependent UI can react
Wired up: pages/admin/permissions/_form.phtml (assigned roles),
pages/admin/roles/_form.phtml (permissions + assignable roles).
Helper contract lives in tests/Support/Helpers/TokenSelectFormHelperTest.php;
runtime contract + entrypoint registration + host usage are enforced by
FrontendRuntime*ContractTest.php.
Coexists with multiSelectForm() — pick tokenSelectForm() when the
selected set can grow beyond ~10 items or typeahead is expected.
Docs in CLAUDE.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:52:32 +02:00
"No permissions selected" : "No permissions selected" ,
"Remove permission" : "Remove permission" ,
"Search permissions…" : "Search permissions…" ,
2026-03-13 09:49:11 +01:00
"No active permissions are configured yet." : "No active permissions are configured yet." ,
2026-03-13 18:56:19 +01:00
"No active roles are configured yet." : "No active roles are configured yet." ,
2026-02-04 23:31:53 +01:00
"Permission denied" : "Permission denied" ,
"No active tenant assigned" : "No active tenant assigned" ,
"Please select at least one tenant" : "Please select at least one tenant" ,
"perm.users.view" : "View users" ,
"perm.users.create" : "Create users" ,
"perm.users.update" : "Update users" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"perm.users.access_pdf" : "Generate onboarding PDFs" ,
2026-02-04 23:31:53 +01:00
"perm.users.delete" : "Delete users" ,
"perm.users.self_update" : "Update own user" ,
"perm.users.update_assignments" : "Update user assignments" ,
"Permission origin" : "Permission origin" ,
"perm.tenants.view" : "View tenants" ,
"perm.tenants.create" : "Create tenants" ,
"perm.tenants.update" : "Update tenants" ,
"perm.tenants.delete" : "Delete tenants" ,
"perm.departments.view" : "View departments" ,
"perm.departments.create" : "Create departments" ,
"perm.departments.update" : "Update departments" ,
"perm.departments.delete" : "Delete departments" ,
"perm.roles.view" : "View roles" ,
"perm.roles.create" : "Create roles" ,
"perm.roles.update" : "Update roles" ,
"perm.roles.delete" : "Delete roles" ,
2026-03-13 21:11:48 +01:00
"perm.roles.assign_all" : "Assign all roles" ,
2026-02-04 23:31:53 +01:00
"perm.permissions.view" : "View permissions" ,
"perm.permissions.create" : "Create permissions" ,
"perm.permissions.update" : "Update permissions" ,
"perm.permissions.delete" : "Delete permissions" ,
"perm.settings.view" : "View settings" ,
"perm.settings.update" : "Update settings" ,
"perm.mail_log.view" : "View mail logs" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"perm.jobs.view" : "View scheduled jobs" ,
"perm.jobs.manage" : "Manage scheduled jobs" ,
"perm.jobs.run_now" : "Run scheduled jobs manually" ,
2026-04-24 14:46:38 +02:00
"perm.audit.api.view" : "View API logs" ,
"perm.audit.api.purge" : "Purge API logs" ,
"perm.audit.system.view" : "View system logs" ,
"perm.audit.system.purge" : "Purge system logs" ,
"perm.audit.imports.view" : "View import audit logs" ,
"perm.audit.imports.purge" : "Purge import audit logs" ,
"perm.audit.user_lifecycle.view" : "View user lifecycle logs" ,
"perm.audit.user_lifecycle.restore" : "Restore users from lifecycle audit" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"perm.user_lifecycle_audit.view" : "View user lifecycle logs" ,
"perm.users.lifecycle_restore" : "Restore users from lifecycle audit" ,
2026-02-04 23:31:53 +01:00
"Select all" : "Select all" ,
"Activate" : "Activate" ,
"Deactivate" : "Deactivate" ,
"Delete" : "Delete" ,
"Activate users?" : "Activate users?" ,
"Deactivate users?" : "Deactivate users?" ,
"Delete users?" : "Delete users?" ,
"Send access emails to selected users?" : "Send access emails to selected users?" ,
"%d users activated" : "%d users activated" ,
"%d users deactivated" : "%d users deactivated" ,
"%d users deleted" : "%d users deleted" ,
"Access emails sent to %d users" : "Access emails sent to %d users" ,
"Access emails sent to %d users, %f failed" : "Access emails sent to %d users, %f failed" ,
"Failed to activate users" : "Failed to activate users" ,
"Failed to deactivate users" : "Failed to deactivate users" ,
"Failed to delete users" : "Failed to delete users" ,
"Failed to send access emails" : "Failed to send access emails" ,
"Home" : "Home" ,
2026-03-24 22:00:14 +01:00
"Exception" : "Exception" ,
"An error occurred" : "An error occurred" ,
"in %s on line %s" : "in %s on line %s" ,
"Copy request ID" : "Copy request ID" ,
"Error details" : "Error details" ,
"Request" : "Request" ,
"Queries" : "Queries" ,
"An unexpected error occurred. If the problem persists, please contact support with the reference below." : "An unexpected error occurred. If the problem persists, please contact support with the reference below." ,
"Stack Trace" : "Stack Trace" ,
"Caused by" : "Caused by" ,
"URL" : "URL" ,
"User Agent" : "User Agent" ,
"Headers" : "Headers" ,
"GET Parameters" : "GET Parameters" ,
"POST Parameters" : "POST Parameters" ,
"Session (keys + types)" : "Session (keys + types)" ,
"Context" : "Context" ,
"PHP" : "PHP" ,
"SAPI" : "SAPI" ,
"Memory (current)" : "Memory (current)" ,
"Memory (peak)" : "Memory (peak)" ,
"Application" : "Application" ,
"Active Modules" : "Active Modules" ,
"Loaded Extensions (%d)" : "Loaded Extensions (%d)" ,
"Query tracking is not available (Debugger disabled or not initialized)." : "Query tracking is not available (Debugger disabled or not initialized)." ,
"No queries were executed before the error occurred." : "No queries were executed before the error occurred." ,
"Queries (%d)" : "Queries (%d)" ,
"Bad Request" : "Bad Request" ,
"Unauthorized" : "Unauthorized" ,
"Forbidden" : "Forbidden" ,
"Not Found" : "Not Found" ,
"Method Not Allowed" : "Method Not Allowed" ,
"Request Timeout" : "Request Timeout" ,
"Unprocessable Entity" : "Unprocessable Entity" ,
"Too Many Requests" : "Too Many Requests" ,
"Internal Server Error" : "Internal Server Error" ,
"Bad Gateway" : "Bad Gateway" ,
"Service Unavailable" : "Service Unavailable" ,
2026-02-04 23:31:53 +01:00
"Users" : "Users" ,
"Avatar" : "Avatar" ,
"Theme" : "Theme" ,
"Light" : "Light" ,
"Dark" : "Dark" ,
2026-03-24 14:12:49 +01:00
"Main menu" : "Main menu" ,
2026-02-04 23:31:53 +01:00
"Toggle Sidebar" : "Toggle Sidebar" ,
"Toggle Detail Sidebar" : "Toggle Detail Sidebar" ,
"%d selected" : "%d selected" ,
"Create user" : "Create user" ,
"Edit user" : "Edit user" ,
2026-03-22 22:28:19 +01:00
"View user" : "View user" ,
2026-02-04 23:31:53 +01:00
"Create" : "Create" ,
"Create & close" : "Create & close" ,
"Save" : "Save" ,
"Save & close" : "Save & close" ,
"Cancel" : "Cancel" ,
2026-03-06 00:44:52 +01:00
"Close" : "Close" ,
"Confirm" : "Confirm" ,
"Please confirm" : "Please confirm" ,
"This action cannot be undone." : "This action cannot be undone." ,
2026-02-04 23:31:53 +01:00
"Active" : "Active" ,
"Actions" : "Actions" ,
"ID" : "ID" ,
"Created" : "Created" ,
"Created by" : "Created by" ,
"Modified by" : "Modified by" ,
"Modified" : "Modified" ,
2026-03-05 11:17:42 +01:00
"Open" : "Open" ,
2026-03-05 12:51:53 +01:00
"Press Enter to open row" : "Press Enter to open row" ,
"Retry" : "Retry" ,
2026-02-04 23:31:53 +01:00
"Yes" : "Yes" ,
"No" : "No" ,
"User created" : "User created" ,
"User updated" : "User updated" ,
"User deleted" : "User deleted" ,
"User not found" : "User not found" ,
"User can not be updated" : "User can not be updated" ,
"Avatar updated" : "Profile image updated" ,
"Avatar removed" : "Profile image removed" ,
"Upload failed" : "Upload failed" ,
"File is too large" : "File is too large" ,
"Invalid image file" : "Invalid image file" ,
"No file uploaded" : "No file uploaded" ,
"You cannot delete your own account" : "You cannot delete your own account" ,
"Login required" : "Login required" ,
"You cannot deactivate your own account" : "You cannot deactivate your own account" ,
"Welcome back" : "Welcome back" ,
"New password (optional)" : "New password (optional)" ,
"Account is inactive" : "Account is inactive" ,
"Inactive" : "Inactive" ,
"Filter" : "Filter" ,
2026-03-04 15:56:58 +01:00
"Apply filters" : "Apply filters" ,
"Clear all filters" : "Clear all filters" ,
"Close filters" : "Close filters" ,
"Remove filter" : "Remove filter" ,
"Filters applied" : "Filters applied" ,
"Filter removed" : "Filter removed" ,
"All filters cleared" : "All filters cleared" ,
2026-02-04 23:31:53 +01:00
"UUID" : "UUID" ,
"Profile image" : "Profile image" ,
"Profile" : "Profile" ,
"Profile description" : "Profile description" ,
"Search results" : "Search results" ,
"Result" : "Result" ,
"Type" : "Type" ,
"Page" : "Page" ,
"Upload image" : "Upload image" ,
"App logo" : "App logo" ,
"Upload logo" : "Upload logo" ,
"Logo updated" : "Logo updated" ,
"Logo removed" : "Logo removed" ,
"Allowed file types: SVG, PNG, JPG, WEBP" : "Allowed file types: SVG, PNG, JPG, WEBP" ,
"Favicon" : "Favicon" ,
"Upload favicon" : "Upload favicon" ,
"Favicon updated" : "Favicon updated" ,
"Favicon removed" : "Favicon removed" ,
"Allowed file types: PNG" : "Allowed file types: PNG" ,
"Square images are recommended (icons are center-cropped)." : "Square images are recommended (icons are center-cropped)." ,
"Primary color" : "Primary color" ,
"Primary color is invalid" : "Primary color is invalid" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"The primary color affects buttons and accent elements across the app." : "The primary color affects buttons and accent elements across the app." ,
2026-02-04 23:31:53 +01:00
"Export CSV" : "Export CSV" ,
feat(core): generic CSV export primitive + helpdesk domains consumer
Add a reusable CSV-export building block to the core so any Grid.js list
page can gain a filter/sort-aware download with two clicks of glue.
Core primitive:
- core/Service/Export/CsvExportService: flavor-aware writer (plain CSV
or Excel-compatible UTF-8+BOM+semicolon), with OWASP-aligned formula-
injection escape (=, @, +, -, TAB, CR) applied to both rows *and*
headers. Value objects for columns (ExportColumn) carry an extractor
closure and an allowSignedNumeric flag for phone-number-shaped cells.
- core/Support/helpers/export.php: thin HTTP layer (exportSendCsv,
exportCapLimit, exportResolveFlavor, exportRequireGetRequest) reusing
the requestInput() contract for GR-CORE-003 consistency. Filename is
sanitized and length-clamped; callers must still enforce auth.
- templates/partials/app-list-export-dropdown.phtml: zero-config
<details class="dropdown"> with CSV + Excel triggers.
- web/js/core/app-list-export.js: initListExport({ gridConfig, exportUrl })
mirrors the current grid filters + sort onto the export URL and
navigates, preserving session cookies for download.
First consumer — Helpdesk domains:
- DomainListService extracts the shared filter/enrich/sort logic from
domains-data so the grid endpoint and the new domains/export endpoint
cannot drift.
- domains/export endpoint delegates to DomainListService, declares
ExportColumns (with translated level labels), and exits via
exportSendCsv.
- domains-data now ~20 lines, delegating to DomainListService.
Tests:
- CsvExportServiceTest (10 cases): both flavors, BOM/no-BOM, formula
escapes incl. TAB/CR, header escape, signed-numeric allowlist,
quoting, multiline, empty columns, generator-compatible iterable.
- ExportHelpersTest (5 cases): exportCapLimit bounds.
- DomainListServiceTest (8 cases): filter, search, "all" sentinel,
sort, paging, enrichment, BC failure, tenant-scoped security filter.
Gates: PHPUnit green, PHPStan clean on touched files, module:sync ok.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 21:57:19 +02:00
"Export" : "Export" ,
"Export as CSV" : "Export as CSV" ,
"Export for Excel" : "Export for Excel" ,
2026-02-04 23:31:53 +01:00
"State" : "State" ,
"Edit" : "Edit" ,
"Status" : "Status" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Visibility" : "Visibility" ,
"Inactive entries are hidden in lists and selections." : "Inactive entries are hidden in lists and selections." ,
2026-02-04 23:31:53 +01:00
"All" : "All" ,
"Explorer" : "Explorer" ,
"Search" : "Search" ,
"Search..." : "Search..." ,
2026-04-01 20:27:42 +02:00
"Search users, tenants, pages..." : "Search users, tenants, pages..." ,
"Users, tenants, departments, roles and more" : "Users, tenants, departments, roles and more" ,
2026-04-01 16:31:59 +02:00
"Searching..." : "Searching..." ,
"Search failed. Please try again." : "Search failed. Please try again." ,
"No results found" : "No results found" ,
"View all results" : "View all results" ,
2026-04-01 20:27:42 +02:00
"navigate" : "navigate" ,
"open" : "open" ,
"close" : "close" ,
2026-02-04 23:31:53 +01:00
"Created from" : "Created from" ,
"Created to" : "Created to" ,
"Settings" : "Settings" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Documentation" : "Documentation" ,
"Documentation navigation" : "Documentation navigation" ,
"On this page" : "On this page" ,
"Getting started" : "Getting started" ,
"Architecture & rules" : "Architecture & rules" ,
"Frontend" : "Frontend" ,
"Features" : "Features" ,
"API reference" : "API reference" ,
"Operations" : "Operations" ,
"Automation & integrations" : "Automation & integrations" ,
"Logs" : "Logs" ,
2026-02-04 23:31:53 +01:00
"System" : "System" ,
2026-02-11 19:28:12 +01:00
"System permission" : "System permission" ,
"System permission can not be deleted" : "System permission can not be deleted" ,
"System permissions are core and should rarely be disabled." : "System permissions are core and should rarely be disabled." ,
2026-02-04 23:31:53 +01:00
"Statistics" : "Statistics" ,
"Active users" : "Active users" ,
"Inactive users" : "Inactive users" ,
"Sent emails" : "Sent emails" ,
"Primary navigation" : "Primary navigation" ,
2026-03-06 00:44:52 +01:00
"Footer navigation" : "Footer navigation" ,
2026-03-05 12:51:53 +01:00
"Language switcher" : "Language switcher" ,
2026-02-04 23:31:53 +01:00
"Sort column ascending" : "Sort column ascending" ,
"Sort column descending" : "Sort column descending" ,
"Previous" : "Previous" ,
"Next" : "Next" ,
2026-03-05 12:51:53 +01:00
"Navigation" : "Navigation" ,
"Display" : "Display" ,
"Session" : "Session" ,
2026-02-04 23:31:53 +01:00
"Page %d of %d" : "Page %d of %d" ,
"Page %d" : "Page %d" ,
2026-03-05 12:51:53 +01:00
"Per page" : "Per page" ,
"Skip to main content" : "Skip to main content" ,
2026-03-05 11:17:42 +01:00
"Rows per page" : "Rows per page" ,
2026-02-04 23:31:53 +01:00
"Showing" : "Showing" ,
"of" : "of" ,
"to" : "to" ,
"results" : "results" ,
"Loading..." : "Loading..." ,
"No records found" : "No records found" ,
"An error happened while fetching the data" : "An error happened while fetching the data" ,
"Delete this user?" : "Delete this user?" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Delete user" : "Delete user" ,
"This will permanently delete this user." : "This will permanently delete this user." ,
2026-02-04 23:31:53 +01:00
"Delete this tenant?" : "Delete this tenant?" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Delete tenant" : "Delete tenant" ,
"This will permanently delete this tenant." : "This will permanently delete this tenant." ,
2026-02-04 23:31:53 +01:00
"Tenant" : "Tenant" ,
"Default tenant" : "Default tenant" ,
"Default role" : "Default role" ,
"Default department" : "Default department" ,
"Default" : "Default" ,
"Access & password" : "Access & password" ,
"Security" : "Security" ,
"Preferences" : "Preferences" ,
"My account" : "My account" ,
"None" : "None" ,
"Settings updated" : "Settings updated" ,
"setting.default_tenant" : "Default tenant used when no tenant is assigned on user creation" ,
"setting.default_role" : "Default role used when no role is assigned on user creation" ,
"setting.default_department" : "Default department used when no department is assigned on user creation" ,
"setting.app_title" : "App title shown in the browser title bar" ,
"setting.app_locale" : "Default language used when no user or URL locale is set" ,
"Default language" : "Default language" ,
2026-02-11 19:28:12 +01:00
"setting.app_registration" : "Allow public self-registration" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"setting.api_token_default_ttl_days" : "Default lifetime for newly created API tokens in days (default: 90)" ,
"setting.api_token_max_ttl_days" : "Maximum lifetime for API tokens in days (hard cap)" ,
"setting.api_cors_allowed_origins" : "Allowed browser origins for API CORS (one origin per line)" ,
"API token default lifetime (days)" : "API token default lifetime (days)" ,
"API token maximum lifetime (days)" : "API token maximum lifetime (days)" ,
"Allowed CORS origins" : "Allowed CORS origins" ,
"One origin per line, e.g. https://app.example.com" : "One origin per line, e.g. https://app.example.com" ,
2026-02-04 23:31:53 +01:00
"Default theme" : "Default theme" ,
"Allow user theme" : "Allow user theme" ,
2026-02-11 19:28:12 +01:00
"Allow registration" : "Allow registration" ,
2026-02-04 23:31:53 +01:00
"Appearance" : "Appearance" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"API docs" : "API docs" ,
"Can view API documentation" : "Can view API documentation" ,
2026-04-22 23:10:44 +02:00
"Appearance is controlled per tenant. Every tenant carries its own primary color and default theme." : "Appearance is controlled per tenant. Every tenant carries its own primary color and default theme." ,
"Users may choose their own theme" : "Users may choose their own theme" ,
"Controls whether users in this tenant can override the tenant default with a personal theme preference." : "Controls whether users in this tenant can override the tenant default with a personal theme preference." ,
2026-04-22 22:49:50 +02:00
"The theme used for users in this tenant who have no personal preference." : "The theme used for users in this tenant who have no personal preference." ,
2026-02-11 19:28:12 +01:00
"Inactive tenants are excluded from user access and tenant-scoped data." : "Inactive tenants are excluded from user access and tenant-scoped data." ,
2026-02-04 23:31:53 +01:00
"Status & meta" : "Status & meta" ,
"Audit" : "Audit" ,
"Overview" : "Overview" ,
"Choose color" : "Choose color" ,
2026-02-11 19:28:12 +01:00
"Code" : "Code" ,
"Cost center" : "Cost center" ,
"Department code already exists" : "Department code already exists" ,
"Role code already exists" : "Role code already exists" ,
2026-02-04 23:31:53 +01:00
"Internationalization" : "Internationalization" ,
"User creation rules" : "User creation rules" ,
"App title" : "App title" ,
"Tenants" : "Tenants" ,
"Create tenant" : "Create tenant" ,
"Edit tenant" : "Edit tenant" ,
2026-03-22 22:28:19 +01:00
"View tenant" : "View tenant" ,
2026-02-04 23:31:53 +01:00
"Tenant created" : "Tenant created" ,
"Tenant updated" : "Tenant updated" ,
"Tenant deleted" : "Tenant deleted" ,
"Tenant not found" : "Tenant not found" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Tenant can not be deleted while departments are assigned" : "Tenant can not be deleted while departments are assigned" ,
2026-02-04 23:31:53 +01:00
"Tenant can not be created" : "Tenant can not be created" ,
"Tenant can not be updated" : "Tenant can not be updated" ,
"Tenant image" : "Tenant image" ,
"Assigned tenants" : "Assigned tenants" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Assigned tenant" : "Assigned tenant" ,
2026-02-04 23:31:53 +01:00
"Primary tenant" : "Primary tenant" ,
"Select primary tenant" : "Select primary tenant" ,
"Please select a primary tenant" : "Please select a primary tenant" ,
"Primary tenant must be one of the assigned tenants" : "Primary tenant must be one of the assigned tenants" ,
"Department assignments cleaned: %d" : "Department assignments cleaned: %d" ,
"Select tenants" : "Select tenants" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Select tenant" : "Select tenant" ,
2026-02-04 23:31:53 +01:00
"Assigned roles" : "Assigned roles" ,
"Select roles" : "Select roles" ,
"Department" : "Department" ,
"Departments" : "Departments" ,
"Create department" : "Create department" ,
"Edit department" : "Edit department" ,
2026-03-22 22:28:19 +01:00
"View department" : "View department" ,
2026-02-04 23:31:53 +01:00
"Department created" : "Department created" ,
"Department updated" : "Department updated" ,
"Department deleted" : "Department deleted" ,
"Department not found" : "Department not found" ,
"Department can not be created" : "Department can not be created" ,
"Department can not be updated" : "Department can not be updated" ,
2026-03-22 18:25:33 +01:00
"Department can not be deleted while users are assigned" : "Department can not be deleted while users are assigned" ,
2026-02-04 23:31:53 +01:00
"Delete this department?" : "Delete this department?" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Delete department" : "Delete department" ,
"This will permanently delete this department." : "This will permanently delete this department." ,
2026-02-04 23:31:53 +01:00
"Assigned departments" : "Assigned departments" ,
"Select departments" : "Select departments" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Departments for tenant" : "Departments for tenant" ,
"No departments available for this tenant" : "No departments available for this tenant" ,
"Assign tenants first to select departments" : "Assign tenants first to select departments" ,
2026-03-13 09:49:11 +01:00
"No tenants available" : "No tenants available" ,
"No tenant is available in your current scope." : "No tenant is available in your current scope." ,
2026-02-04 23:31:53 +01:00
"Role" : "Role" ,
"Roles" : "Roles" ,
2026-03-13 09:49:11 +01:00
"No roles available" : "No roles available" ,
feat(ui): token-select primitive for large multi-selects
Adds tokenSelectForm() in core/Support/helpers/ui.php: an inline
typeahead combobox + flat alphabetical removable list, designed for
selections that outgrow the chip-header of the vendor MultiSelect
(roles, permissions, and similar admin pickers).
Contract:
- Hidden <select multiple name="<name>[]"> is the form submission source —
consumers read via $request->body() verbatim, no parsing
- Items are ['id' => int, <labelKey> => string, 'key' => string?]
where labelKeys default to ['description', 'label', 'name']; 'key' is
an invisible fuzzy-match hint
- $labelOverrides lets callers swap emptyState / removeTooltip /
noMatches / clearAll / countSuffix / errorMessage with domain copy
- $disabled renders pure-presentation list (no combobox, no remove)
Runtime:
- initTokenSelect in web/js/components/app-token-select.js is registered
as 'token-select' in app-init.js; destroy()/cleanupFns contract
- Syncs the hidden <select> on every mutation and dispatches 'change'
so dependent UI can react
Wired up: pages/admin/permissions/_form.phtml (assigned roles),
pages/admin/roles/_form.phtml (permissions + assignable roles).
Helper contract lives in tests/Support/Helpers/TokenSelectFormHelperTest.php;
runtime contract + entrypoint registration + host usage are enforced by
FrontendRuntime*ContractTest.php.
Coexists with multiSelectForm() — pick tokenSelectForm() when the
selected set can grow beyond ~10 items or typeahead is expected.
Docs in CLAUDE.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:52:32 +02:00
"No roles selected" : "No roles selected" ,
"Remove role" : "Remove role" ,
"Search roles…" : "Search roles…" ,
2026-03-13 21:11:48 +01:00
"Assignable roles" : "Assignable roles" ,
2026-02-04 23:31:53 +01:00
"Create role" : "Create role" ,
"Edit role" : "Edit role" ,
2026-03-22 22:28:19 +01:00
"View role" : "View role" ,
2026-02-04 23:31:53 +01:00
"Role created" : "Role created" ,
"Role updated" : "Role updated" ,
"Role deleted" : "Role deleted" ,
"Role not found" : "Role not found" ,
"Role can not be created" : "Role can not be created" ,
"Role can not be updated" : "Role can not be updated" ,
"Delete this role?" : "Delete this role?" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Delete role" : "Delete role" ,
"Delete permission" : "Delete permission" ,
"This will permanently delete this role." : "This will permanently delete this role." ,
"This will permanently delete this permission." : "This will permanently delete this permission." ,
2026-02-04 23:31:53 +01:00
"Description" : "Description" ,
"Description cannot be empty" : "Description cannot be empty" ,
"Status is invalid" : "Status is invalid" ,
"Address" : "Address" ,
"Postal code" : "Postal code" ,
"City" : "City" ,
"Country" : "Country" ,
"Mail logs" : "Mail logs" ,
"Mail log" : "Mail log" ,
"View mail log" : "View mail log" ,
"Mail log not found" : "Mail log not found" ,
"Email details" : "Email details" ,
"Recipient" : "Recipient" ,
"Subject" : "Subject" ,
"Template" : "Template" ,
"Sent" : "Sent" ,
"Failed" : "Failed" ,
"Queued" : "Queued" ,
"Error message" : "Error message" ,
"Error information" : "Error information" ,
"Provider message ID" : "Provider message ID" ,
"Sent at" : "Sent at" ,
"Created at" : "Created at" ,
"Delivery information" : "Delivery information" ,
"All statuses" : "All statuses" ,
"Contact" : "Contact" ,
"Support" : "Support" ,
"Support email" : "Support email" ,
"Support phone" : "Support phone" ,
2026-03-13 09:49:11 +01:00
"No contact details available" : "No contact details available" ,
2026-02-04 23:31:53 +01:00
"VAT ID" : "VAT ID" ,
"Tax number" : "Tax number" ,
"Billing email" : "Billing email" ,
"Phone" : "Phone" ,
"Website" : "Website" ,
"Legal" : "Legal" ,
2026-03-13 09:49:11 +01:00
"No legal links configured" : "No legal links configured" ,
2026-02-04 23:31:53 +01:00
"Privacy URL" : "Privacy URL" ,
"Imprint URL" : "Imprint URL" ,
"Region" : "Region" ,
"Fax" : "Fax" ,
"Back" : "Back" ,
"Access denied" : "Access denied" ,
"You do not have permission to view this content." : "You do not have permission to view this content." ,
"If you believe this is an error, please contact your system administrator." : "If you believe this is an error, please contact your system administrator." ,
"Requested URL" : "Requested URL" ,
"Forward" : "Forward" ,
"Status changed" : "Status changed" ,
"Status changed by" : "Status changed by" ,
"Requested path" : "Requested path" ,
"Page not found" : "Page not found" ,
"The page you requested does not exist or has moved." : "The page you requested does not exist or has moved." ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Back to start" : "Back to start" ,
2026-02-04 23:31:53 +01:00
"Page updated" : "Page updated" ,
"Page can not be updated" : "Page can not be updated" ,
"Content is invalid" : "Content is invalid" ,
"You are not allowed to edit this page" : "You are not allowed to edit this page" ,
"Form expired, please try again" : "Form expired, please try again" ,
"Start writing..." : "Start writing..." ,
"View" : "View" ,
"Heading" : "Heading" ,
"Copy content to" : "Copy content to" ,
"Existing content in the target language will be overwritten" : "Existing content in the target language will be overwritten" ,
"Content copied" : "Content copied" ,
"Target language required" : "Target language required" ,
"Source content not found" : "Source content not found" ,
"Employment" : "Employment" ,
"Job title" : "Job title" ,
"Hire date" : "Hire date" ,
"German" : "German" ,
"English" : "English" ,
"Switch tenant" : "Switch tenant" ,
"Copy" : "Copy" ,
"Registration successful! Please check your email for the verification code." : "Registration successful! Please check your email for the verification code." ,
2026-02-11 19:28:12 +01:00
"Registration is currently disabled" : "Registration is currently disabled." ,
2026-02-04 23:31:53 +01:00
"A new verification code has been sent." : "A new verification code has been sent." ,
"Email already verified. Please login." : "Email already verified. Please login." ,
"If the email exists, a new verification code has been sent." : "If the email exists, a new verification code has been sent." ,
"Email verified successfully! Please login." : "Email verified successfully! Please login." ,
"Too many failed attempts. Please request a new code." : "Too many failed attempts. Please request a new code." ,
"Verify email" : "Verify email" ,
"Enter the verification code we sent to your email to complete your registration." : "Enter the verification code we sent to your email to complete your registration." ,
"Email verified" : "Email verified" ,
"Not verified" : "Not verified" ,
"Verified" : "Verified" ,
"SMTP host" : "SMTP host" ,
"SMTP port" : "SMTP port" ,
"SMTP user" : "SMTP user" ,
"SMTP password" : "SMTP password" ,
"SMTP security" : "SMTP security" ,
"SMTP from address" : "SMTP from address" ,
"SMTP from name" : "SMTP from name" ,
"Mobile" : "Mobile" ,
"Short dial" : "Short dial" ,
"setting.smtp_host" : "SMTP server host (e.g. smtp.example.com)" ,
"setting.smtp_port" : "SMTP port (e.g. 587)" ,
"setting.smtp_user" : "SMTP username" ,
"setting.smtp_password" : "Leave empty to keep the existing password" ,
"setting.smtp_secure" : "SMTP encryption method" ,
"setting.smtp_from" : "From address for outgoing emails" ,
2026-02-11 19:28:12 +01:00
"setting.smtp_from_name" : "From name for outgoing emails" ,
"High contrast" : "High contrast" ,
"Toggle contrast" : "Toggle contrast" ,
"Email security" : "Email security" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"API" : "API" ,
"API requests (24h)" : "API requests (24h)" ,
"Request trend vs previous 24h" : "Request trend vs previous 24h" ,
"4xx errors (24h)" : "4xx errors (24h)" ,
"5xx errors (24h)" : "5xx errors (24h)" ,
"P95 response time (ms)" : "P95 response time (ms)" ,
"Tokens expiring in 7 days" : "Tokens expiring in 7 days" ,
"Top API error codes (24h)" : "Top API error codes (24h)" ,
"Slowest API endpoints (avg, 24h)" : "Slowest API endpoints (avg, 24h)" ,
"Import runs (7d)" : "Import runs (7d)" ,
"Created rows (7d)" : "Created rows (7d)" ,
"Failed rows (7d)" : "Failed rows (7d)" ,
"Success rate (7d)" : "Success rate (7d)" ,
"Recent import runs" : "Recent import runs" ,
"Imports by profile (7d)" : "Imports by profile (7d)" ,
"Top import error codes (7d)" : "Top import error codes (7d)" ,
"Runs" : "Runs" ,
"Created rows" : "Created rows" ,
"Failed rows" : "Failed rows" ,
"Success rate" : "Success rate" ,
"Requests" : "Requests" ,
"Average duration (ms)" : "Average duration (ms)" ,
"Maximum duration (ms)" : "Maximum duration (ms)" ,
2026-02-11 19:28:12 +01:00
"Error" : "Error" ,
"Active tenants" : "Active tenants" ,
"Inactive tenants" : "Inactive tenants" ,
"Active departments" : "Active departments" ,
"Inactive departments" : "Inactive departments" ,
"Active roles" : "Active roles" ,
"Inactive roles" : "Inactive roles" ,
"Roles without permissions" : "Roles without permissions" ,
"Permissions without roles" : "Permissions without roles" ,
"Users without roles" : "Users without roles" ,
"Users without tenants" : "Users without tenants" ,
"Mail failures" : "Mail failures" ,
"Last email sent" : "Last email sent" ,
"Never" : "Never" ,
"Recent logins" : "Recent logins" ,
"Never logged in" : "Never logged in" ,
"Last login" : "Last login" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Last login via" : "Last login via" ,
"Local" : "Local" ,
"Microsoft" : "Microsoft" ,
"Unknown" : "Unknown" ,
2026-02-11 19:28:12 +01:00
"User" : "User" ,
"No entries found" : "No entries found" ,
"Login status" : "Login status" ,
"Logged in" : "Logged in" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Email unverified" : "Email unverified" ,
2026-02-11 19:28:12 +01:00
"Password resets" : "Password resets" ,
2026-03-13 09:49:11 +01:00
"No password reset requests" : "No password reset requests" ,
"No reset has been requested for this account yet." : "No reset has been requested for this account yet." ,
2026-02-11 19:28:12 +01:00
"Requested at" : "Requested at" ,
"Expires at" : "Expires at" ,
"Used at" : "Used at" ,
"Attempts" : "Attempts" ,
"Used" : "Used" ,
"Expired" : "Expired" ,
"Expired by admin" : "Expired by admin" ,
"Login tokens" : "Login tokens" ,
2026-03-13 09:49:11 +01:00
"No login tokens" : "No login tokens" ,
"This user is currently not signed in via remember-me." : "This user is currently not signed in via remember-me." ,
2026-02-11 19:28:12 +01:00
"Expire all login tokens" : "Expire all login tokens" ,
"Expire all login tokens?" : "Expire all login tokens?" ,
"%d active login tokens" : "%d active login tokens" ,
"%d login tokens expired" : "%d login tokens expired" ,
"Danger zone" : "Danger zone" ,
"This will mark all remember-me tokens as expired. Users will need to sign in again." : "This will mark all remember-me tokens as expired. Users will need to sign in again." ,
"Last used" : "Last used" ,
"Keyboard shortcuts" : "Keyboard shortcuts" ,
"Open search" : "Open search" ,
2026-03-04 15:56:58 +01:00
"Save in edit pages" : "Save in edit pages" ,
"Unsaved changes" : "Unsaved changes" ,
"Unsaved change (%d field)" : "Unsaved change (%d field)" ,
"Unsaved changes (%d fields)" : "Unsaved changes (%d fields)" ,
"Please review the following errors" : "Please review the following errors" ,
"You have unsaved changes. Leave without saving?" : "You have unsaved changes. Leave without saving?" ,
2026-02-11 19:28:12 +01:00
"Switch sidebar section" : "Switch sidebar section" ,
"Action" : "Action" ,
"Mac" : "Mac" ,
"Windows" : "Windows" ,
"Email verification code" : "Email verification code" ,
"Failed to switch tenant" : "Failed to switch tenant" ,
"IDs" : "IDs" ,
"Pages" : "Pages" ,
"Permission" : "Permission" ,
2026-03-13 09:49:11 +01:00
"No effective permissions" : "No effective permissions" ,
"Assign at least one role to show effective permissions." : "Assign at least one role to show effective permissions." ,
2026-02-11 19:28:12 +01:00
"Please verify your email first" : "Please verify your email first" ,
"Toggle sidebar" : "Toggle sidebar" ,
"Unverified" : "Unverified" ,
"Imprint" : "Imprint" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Privacy" : "Privacy" ,
2026-03-12 14:09:06 +01:00
"Terms of Service" : "Terms of Service" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Custom fields" : "Custom fields" ,
"User custom fields" : "User custom fields" ,
"Affected tenants" : "Affected tenants" ,
"If a tenant appears here, at least one custom field setup needs review (missing options, inactive fields with values, or unused active fields)." : "If a tenant appears here, at least one custom field setup needs review (missing options, inactive fields with values, or unused active fields)." ,
"Issue" : "Issue" ,
"Count" : "Count" ,
"Selection fields without options" : "Selection fields without options" ,
"Tenants with broken selection fields" : "Tenants with broken selection fields" ,
"Inactive custom fields with values" : "Inactive custom fields with values" ,
"Unused active custom fields" : "Unused active custom fields" ,
"Save tenant first to manage custom fields" : "Save tenant first to manage custom fields" ,
"Define custom fields here. They appear per user in the \"Custom fields\" tab and can be maintained there." : "Define custom fields here. They appear per user in the \"Custom fields\" tab and can be maintained there." ,
"Add custom field" : "Add custom field" ,
"The label is shown in user custom fields and in address book filters." : "The label is shown in user custom fields and in address book filters." ,
"The field type controls input and filter behavior." : "The field type controls input and filter behavior." ,
"Field type" : "Field type" ,
"Text" : "Text" ,
"Textarea" : "Textarea" ,
"Select" : "Select" ,
"Multiselect" : "Multiselect" ,
"Boolean" : "Boolean" ,
"Date" : "Date" ,
"Filterable" : "Filterable" ,
"Options (one per line)" : "Options (one per line)" ,
"Example: manager|Manager" : "Example: manager|Manager" ,
"One option per line. Optional format: key|Label." : "One option per line. Optional format: key|Label." ,
"No custom fields configured yet" : "No custom fields configured yet" ,
"Delete custom field" : "Delete custom field" ,
"Custom field saved" : "Custom field saved" ,
"Custom field deleted" : "Custom field deleted" ,
"Custom field can not be created" : "Custom field can not be created" ,
"Custom field can not be updated" : "Custom field can not be updated" ,
"Custom field can not be deleted" : "Custom field can not be deleted" ,
"Custom field values can not be saved" : "Custom field values can not be saved" ,
"Custom field not found" : "Custom field not found" ,
"Label cannot be empty" : "Label cannot be empty" ,
"Field key cannot be empty" : "Field key cannot be empty" ,
"Field type is invalid" : "Field type is invalid" ,
"Field key already exists" : "Field key already exists" ,
"Options are required for this field type" : "Options are required for this field type" ,
"Assign tenants first to edit custom fields" : "Assign tenants first to edit custom fields" ,
"Custom fields for tenant" : "Custom fields for tenant" ,
"No custom fields configured for this tenant" : "No custom fields configured for this tenant" ,
"No custom fields configured for selected tenants" : "No custom fields configured for selected tenants" ,
"Select options" : "Select options" ,
"Invalid value for %s" : "Invalid value for %s" ,
"Please select" : "Please select" ,
"perm.custom_fields.manage" : "Manage tenant custom fields" ,
"perm.custom_fields.edit_values" : "Edit user custom field values" ,
"Label" : "Label" ,
"Required" : "Required" ,
"Filterable fields are available in address book filters." : "Filterable fields are available in address book filters." ,
"Inactive fields are hidden in forms and filters." : "Inactive fields are hidden in forms and filters." ,
"Default theme is invalid" : "Default theme is invalid" ,
"Theme change is disabled for this tenant" : "Theme change is disabled for this tenant" ,
"Controls whether users in this tenant can choose their own theme." : "Controls whether users in this tenant can choose their own theme." ,
"Tenants can override color and theme behavior in their appearance settings." : "Tenants can override color and theme behavior in their appearance settings." ,
"User theme policy" : "User theme policy" ,
"APP_CRYPTO_KEY is missing or invalid" : "APP_CRYPTO_KEY is missing or invalid" ,
"Allowed email domains" : "Allowed email domains" ,
"Authority URL" : "Authority URL" ,
"Clear override secret" : "Clear override secret" ,
"Client ID override" : "Client ID override" ,
"Client ID override is required" : "Client ID override is required" ,
"Client secret could not be encrypted" : "Client secret could not be encrypted" ,
"Client secret override" : "Client secret override" ,
"Client secret override is required" : "Client secret override is required" ,
"Enable Microsoft login for this tenant" : "Enable Microsoft login for this tenant" ,
"Entra tenant ID (tid)" : "Entra tenant ID (tid)" ,
"Entra tenant ID is invalid" : "Entra tenant ID is invalid" ,
"Microsoft SSO" : "Microsoft SSO" ,
"Microsoft login" : "Microsoft login" ,
"Microsoft login could not be started" : "Microsoft login could not be started" ,
"Microsoft login failed" : "Microsoft login failed" ,
"Microsoft login is not allowed for this account" : "Microsoft login is not allowed for this account" ,
"Microsoft login is not available for this tenant" : "Microsoft login is not available for this tenant" ,
"Microsoft login was cancelled or failed" : "Microsoft login was cancelled or failed" ,
"Microsoft-only login requires a complete configuration" : "Microsoft-only login requires a complete configuration" ,
"No access to this tenant" : "No access to this tenant" ,
"Shared credentials missing" : "Shared credentials missing" ,
"Optional allow-list, comma or newline separated (example.com)." : "Optional allow-list, comma or newline separated (example.com)." ,
"Password login is disabled for this tenant. Please use Microsoft login." : "Password login is disabled for this tenant. Please use Microsoft login." ,
"Password login is disabled for all assigned tenants" : "Password login is disabled for all assigned tenants" ,
"Password login mode" : "Password login mode" ,
2026-03-12 10:01:24 +01:00
"Local password only" : "Local password only" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Local password + Microsoft" : "Local password + Microsoft" ,
"Credentials source" : "Credentials source" ,
"Shared app" : "Shared app" ,
"Tenant override" : "Tenant override" ,
"SSO configuration status" : "SSO configuration status" ,
"Configuration complete" : "Configuration complete" ,
"Required Microsoft configuration" : "Required Microsoft configuration" ,
"Required for Microsoft login." : "Required for Microsoft login." ,
"SSO" : "SSO" ,
"Shared Microsoft app credentials are used by tenants that enable \"Use shared app credentials\"." : "Shared Microsoft app credentials are used by tenants that enable \"Use shared app credentials\"." ,
"Shared client ID" : "Shared client ID" ,
"Shared client secret" : "Shared client secret" ,
"Sign in with Microsoft" : "Sign in with Microsoft" ,
"Tenant SSO settings could not be saved" : "Tenant SSO settings could not be saved" ,
"Tenant login link is invalid" : "Tenant login link is invalid" ,
"Profile sync on Microsoft login" : "Profile sync on Microsoft login" ,
"Sync fields" : "Sync fields" ,
"Sync first name" : "Sync first name" ,
"Sync last name" : "Sync last name" ,
2026-04-13 14:13:21 +02:00
"Sync display name" : "Sync display name" ,
"Sync job title" : "Sync job title" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Sync phone" : "Sync phone" ,
"Sync mobile" : "Sync mobile" ,
"Sync avatar image" : "Sync avatar image" ,
"User profile fields are global and affect all tenants of this user" : "User profile fields are global and affect all tenants of this user" ,
"Phone/mobile/avatar sync requires Microsoft Graph (User.Read)" : "Phone/mobile/avatar sync requires Microsoft Graph (User.Read)" ,
"SSO-enabled tenants" : "SSO-enabled tenants" ,
"SSO-enforced tenants" : "SSO-enforced tenants" ,
"SSO rollout" : "SSO rollout" ,
"Users with Microsoft-only login" : "Users with Microsoft-only login" ,
"Microsoft profile sync gaps" : "Microsoft profile sync gaps" ,
"Microsoft only" : "Microsoft only" ,
"Use shared app credentials from settings" : "Use shared app credentials from settings" ,
"Override only if this tenant needs a separate Entra app." : "Override only if this tenant needs a separate Entra app." ,
"Write-only. Leave empty to keep current secret." : "Write-only. Leave empty to keep current secret." ,
"Client secret override is invalid" : "Client secret override is invalid" ,
"Client credentials are missing" : "Client credentials are missing" ,
"setting.microsoft_shared_client_id" : "Setting key for shared Microsoft client ID" ,
"setting.microsoft_shared_client_secret_enc" : "Setting key for shared Microsoft client secret (encrypted)" ,
"setting.microsoft_authority" : "Base OpenID authority URL for Microsoft login" ,
"API tokens" : "API tokens" ,
"Token name" : "Token name" ,
"Create API token" : "Create API token" ,
"Revoke" : "Revoke" ,
"Revoke this API token?" : "Revoke this API token?" ,
"Revoked" : "Revoked" ,
"Prefix" : "Prefix" ,
"No API tokens" : "No API tokens" ,
2026-03-13 09:49:11 +01:00
"Create a token to enable API access for this user." : "Create a token to enable API access for this user." ,
"No API token has been created for this user yet." : "No API token has been created for this user yet." ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"New API token (copy now — shown only once):" : "New API token (copy now — shown only once):" ,
"API token created. Copy it now — it will not be shown again." : "API token created. Copy it now — it will not be shown again." ,
"Could not create API token: %s" : "Could not create API token: %s" ,
"API token revoked" : "API token revoked" ,
"%d API tokens revoked" : "%d API tokens revoked" ,
"%d active API tokens" : "%d active API tokens" ,
"Revoke all API tokens" : "Revoke all API tokens" ,
"Revoke all API tokens?" : "Revoke all API tokens?" ,
"API token default lifetime is invalid" : "API token default lifetime is invalid" ,
"API token max lifetime is invalid" : "API token max lifetime is invalid" ,
2026-03-26 15:09:55 +01:00
"nav.logs.mail" : "E-mail" ,
"nav.audit.api" : "API" ,
"nav.audit.system" : "System" ,
"nav.audit.imports" : "Imports" ,
"nav.audit.user_lifecycle" : "User lifecycle" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"API audit" : "API logs" ,
"API audit logs" : "API logs" ,
"Request ID" : "Request ID" ,
"Method" : "Method" ,
"Path" : "Path" ,
"Status code" : "Status code" ,
"Duration (ms)" : "Duration (ms)" ,
"Error code" : "Error code" ,
"Token ID" : "Token ID" ,
"Token tenant" : "Token tenant" ,
"Purge API audit logs" : "Purge API logs" ,
"Purge entries older than 90 days?" : "Purge entries older than 90 days?" ,
"%d API audit entries purged" : "%d API log entries purged" ,
"API audit entry not found" : "API log entry not found" ,
"View API audit entry" : "View API log entry" ,
"Request details" : "Request details" ,
"Scope" : "Scope" ,
2026-04-05 23:20:55 +02:00
"Query metadata (keys)" : "Query metadata (keys)" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"All methods" : "All methods" ,
"Tenant ID" : "Tenant ID" ,
"User ID" : "User ID" ,
"IP" : "IP" ,
"CORS allowed origins are invalid" : "CORS allowed origins are invalid" ,
"Token name is required" : "Token name is required" ,
"e.g. CI Pipeline" : "e.g. CI Pipeline" ,
"Imports" : "Imports" ,
"You do not have permission to run imports." : "You do not have permission to run imports." ,
"CSV file" : "CSV file" ,
"Max size 10MB, max 20000 rows" : "Max size 10MB, max 20000 rows" ,
"Download sample CSV" : "Download sample CSV" ,
"Analyze file" : "Analyze file" ,
"CSV header" : "CSV header" ,
"Target field" : "Target field" ,
"Ignore column" : "Ignore column" ,
"Assignment columns require additional permission." : "Assignment columns require additional permission." ,
"Run preview" : "Run preview" ,
"Preview" : "Preview" ,
"Rows total" : "Rows total" ,
"Valid rows" : "Valid rows" ,
"Would create" : "Would create" ,
"Would skip" : "Would skip" ,
"Would fail" : "Would fail" ,
"Row issues" : "Row issues" ,
"Start import" : "Start import" ,
"Import finished" : "Import finished" ,
"Processed" : "Processed" ,
"Skipped" : "Skipped" ,
"Import another file" : "Import another file" ,
"No row errors found" : "No row errors found" ,
"Row" : "Row" ,
"Message" : "Message" ,
"No upload file provided" : "No upload file provided" ,
"Upload exceeds the maximum size" : "Upload exceeds the maximum size" ,
"Invalid file type" : "Invalid file type" ,
"CSV header is invalid" : "CSV header is invalid" ,
"CSV file has no data rows" : "CSV file has no data rows" ,
"CSV row limit exceeded" : "CSV row limit exceeded" ,
"Required mapping is missing" : "Required mapping is missing" ,
"Assignment import permission is required" : "Assignment import permission is required" ,
"Email is invalid" : "Email is invalid" ,
"Email already exists" : "Email already exists" ,
"Locale is invalid" : "Locale is invalid" ,
"Active value is invalid" : "Active value is invalid" ,
"Hire date must be YYYY-MM-DD" : "Hire date must be YYYY-MM-DD" ,
"Tenant is missing, inactive or invalid" : "Tenant is missing, inactive or invalid" ,
"Role is missing, inactive or invalid" : "Role is missing, inactive or invalid" ,
"Department is missing, inactive or invalid" : "Department is missing, inactive or invalid" ,
"Department does not belong to tenant" : "Department does not belong to tenant" ,
"Tenant assignment is out of your scope" : "Tenant assignment is out of your scope" ,
"Unexpected error during import" : "Unexpected error during import" ,
"Required field is empty: first_name" : "Required field is empty: first_name" ,
"Required field is empty: last_name" : "Required field is empty: last_name" ,
"User assignments can not be updated" : "User assignments can not be updated" ,
"How the import works" : "How the import works" ,
"1. Upload CSV and click analyze" : "1. Upload CSV and click analyze" ,
"2. Map your CSV columns to system fields" : "2. Map your CSV columns to system fields" ,
"3. Review preview counters and row errors" : "3. Review preview counters and row errors" ,
"4. Start import for valid rows" : "4. Start import for valid rows" ,
"Rules" : "Rules" ,
"Create-only: existing entries are skipped" : "Create-only: existing entries are skipped" ,
"Here is a CSV template for this import profile." : "Here is a CSV template for this import profile." ,
"Reference" : "Reference" ,
"Required fields" : "Required fields" ,
"Required field is empty: description" : "Required field is empty: description" ,
"Tenant must be a valid UUID" : "Tenant must be a valid UUID" ,
"Code already exists" : "Code already exists" ,
"Department already exists for this tenant" : "Department already exists for this tenant" ,
"Duplicate entry in CSV file" : "Duplicate entry in CSV file" ,
"Entry could not be created" : "Entry could not be created" ,
"Import logs" : "Import logs" ,
"Import audit logs" : "Import audit logs" ,
"Run UUID" : "Run UUID" ,
"Mapped fields" : "Mapped fields" ,
"Created count" : "Created count" ,
"Skipped count" : "Skipped count" ,
"Failed count" : "Failed count" ,
"Purge import logs" : "Purge import logs" ,
"%d import audit entries purged" : "%d import audit entries purged" ,
"Import audit entry not found" : "Import audit entry not found" ,
"View import audit entry" : "View import audit entry" ,
"Import details" : "Import details" ,
"Started" : "Started" ,
"Finished" : "Finished" ,
"File" : "File" ,
"Current tenant" : "Current tenant" ,
"Error code distribution" : "Error code distribution" ,
"All profiles" : "All profiles" ,
"Running" : "Running" ,
"Success" : "Success" ,
"Partial" : "Partial" ,
"Import" : "Import" ,
"Counters" : "Counters" ,
"User lifecycle policy" : "User lifecycle policy" ,
2026-03-09 20:07:55 +01:00
"Session policy" : "Session policy" ,
2026-03-09 21:57:52 +01:00
"Registration controls whether new users can create an account." : "Registration controls whether new users can create an account." ,
2026-03-09 20:47:21 +01:00
"Session limits define how long logged-in users stay signed in." : "Set idle and absolute limits for active sessions." ,
2026-03-09 21:57:52 +01:00
"User lifecycle defines when inactive users are deactivated or deleted." : "User lifecycle defines when inactive users are deactivated or deleted." ,
"System audit controls whether security events are logged and how long they are kept." : "System audit controls whether security events are logged and how long they are kept." ,
2026-03-09 20:07:55 +01:00
"Session idle timeout (minutes)" : "Session idle timeout (minutes)" ,
"Session absolute timeout (hours)" : "Session absolute timeout (hours)" ,
"Allowed range: 5-1440 minutes (default: 30)" : "Allowed range: 5-1440 minutes (default: 30)" ,
"Allowed range: 1-72 hours (default: 8)" : "Allowed range: 1-72 hours (default: 8)" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Deactivate users after inactivity (days)" : "Deactivate users after inactivity (days)" ,
"Delete inactive users after (days)" : "Delete inactive users after (days)" ,
"0 disables this rule" : "0 disables this rule" ,
"Run user lifecycle now?" : "Run user lifecycle now?" ,
"Run user lifecycle now" : "Run user lifecycle now" ,
"setting.user_inactivity_deactivate_days" : "Automatically set users inactive after this many days without login" ,
"setting.user_inactivity_delete_days" : "Automatically delete inactive users after this many additional days" ,
2026-03-09 20:07:55 +01:00
"setting.session_idle_timeout_minutes" : "Maximum idle time in minutes before users are signed out (default: 30)" ,
"setting.session_absolute_timeout_hours" : "Maximum total session duration in hours before users are signed out (default: 8)" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"User lifecycle already running" : "User lifecycle already running" ,
"User lifecycle failed" : "User lifecycle failed" ,
"User lifecycle completed: %d deactivated, %d deleted" : "User lifecycle completed: %d deactivated, %d deleted" ,
"User inactivity deactivation period is invalid" : "User inactivity deactivation period is invalid" ,
"User inactivity deletion period is invalid" : "User inactivity deletion period is invalid" ,
2026-03-09 20:07:55 +01:00
"Session idle timeout is invalid" : "Session idle timeout is invalid" ,
"Session absolute timeout is invalid" : "Session absolute timeout is invalid" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Auto-delete is ignored while auto-deactivate is disabled" : "Auto-delete is ignored while auto-deactivate is disabled" ,
"Scheduled jobs" : "Scheduled jobs" ,
"Scheduled job not found" : "Scheduled job not found" ,
"Scheduled job is not registered" : "Scheduled job is not registered" ,
2026-04-13 14:13:09 +02:00
"This scheduled job is no longer registered and cannot be edited. It has been superseded by a newer version." : "This scheduled job is no longer registered and cannot be edited. It has been superseded by a newer version." ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Scheduled job could not be saved" : "Scheduled job could not be saved" ,
"Scheduled job saved" : "Scheduled job saved" ,
"Edit scheduled job" : "Edit scheduled job" ,
2026-03-22 22:28:19 +01:00
"View scheduled job" : "View scheduled job" ,
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
"Job" : "Job" ,
"Job key" : "Job key" ,
"Run history" : "Run history" ,
"Run now" : "Run now" ,
"Next run" : "Next run" ,
"Last run" : "Last run" ,
"Last error" : "Last error" ,
"Schedule" : "Schedule" ,
"Schedule type" : "Schedule type" ,
"Schedule interval" : "Schedule interval" ,
"Schedule time" : "Schedule time" ,
"Weekdays" : "Weekdays" ,
"Hourly" : "Hourly" ,
"Daily" : "Daily" ,
"Weekly" : "Weekly" ,
"Enabled" : "Enabled" ,
"Disabled" : "Disabled" ,
"Timezone" : "Timezone" ,
"Catch up once" : "Catch up once" ,
"Scheduler" : "Scheduler" ,
"Every %d hour(s)" : "Every %d hour(s)" ,
"Every %d day(s) at %s" : "Every %d day(s) at %s" ,
"Every %d week(s) on %s at %s" : "Every %d week(s) on %s at %s" ,
"No weekdays" : "No weekdays" ,
"Mon" : "Mon" ,
"Tue" : "Tue" ,
"Wed" : "Wed" ,
"Thu" : "Thu" ,
"Fri" : "Fri" ,
"Sat" : "Sat" ,
"Sun" : "Sun" ,
"Schedule type is invalid" : "Schedule type is invalid" ,
"Schedule time is required" : "Schedule time is required" ,
"Timezone is invalid" : "Timezone is invalid" ,
"Hourly interval must be between 1 and 24" : "Hourly interval must be between 1 and 24" ,
"Daily interval must be between 1 and 365" : "Daily interval must be between 1 and 365" ,
"Weekly interval must be between 1 and 52" : "Weekly interval must be between 1 and 52" ,
"At least one weekday is required for weekly schedule" : "At least one weekday is required for weekly schedule" ,
"Scheduled job run completed" : "Scheduled job run completed" ,
"Scheduled job run skipped" : "Scheduled job run skipped" ,
"Scheduled job run failed" : "Scheduled job run failed" ,
"Scheduler is already running" : "Scheduler is already running" ,
"Purge scheduler logs" : "Purge scheduler logs" ,
"Purge run logs older than 90 days?" : "Purge run logs older than 90 days?" ,
"%d scheduler run logs purged" : "%d scheduler run logs purged" ,
"User lifecycle logs" : "User lifecycle logs" ,
"View user lifecycle audit entry" : "View user lifecycle audit entry" ,
"Lifecycle audit entry not found" : "Lifecycle audit entry not found" ,
"Purge user lifecycle logs" : "Purge user lifecycle logs" ,
"Purge entries older than 365 days?" : "Purge entries older than 365 days?" ,
"%d user lifecycle audit entries purged" : "%d user lifecycle audit entries purged" ,
"Lifecycle event" : "Lifecycle event" ,
"Trigger" : "Trigger" ,
"Reason code" : "Reason code" ,
"Target" : "Target" ,
"Target UUID" : "Target UUID" ,
"Target email" : "Target email" ,
"Policy" : "Policy" ,
"Snapshot summary" : "Snapshot summary" ,
"Snapshot version" : "Snapshot version" ,
"Restore status" : "Restore status" ,
"Restored at" : "Restored at" ,
"Restored by" : "Restored by" ,
"Restored user" : "Restored user" ,
"Restore user" : "Restore user" ,
"Restore" : "Restore" ,
"Restore this user from lifecycle snapshot?" : "Restore this user from lifecycle snapshot?" ,
"User restored" : "User restored" ,
"User restore failed" : "User restore failed" ,
"Lifecycle event was already restored" : "Lifecycle event was already restored" ,
"Lifecycle snapshot unavailable" : "Lifecycle snapshot unavailable" ,
"Restore not possible: email already exists" : "Restore not possible: email already exists" ,
"Restore not possible: uuid already exists" : "Restore not possible: uuid already exists" ,
"All triggers" : "All triggers" ,
"Manual" : "Manual" ,
"Cron" : "Cron" ,
"Enabled jobs" : "Enabled jobs" ,
"Overdue jobs" : "Overdue jobs" ,
"Scheduler runs (24h)" : "Scheduler runs (24h)" ,
"Failed scheduler runs (24h)" : "Failed scheduler runs (24h)" ,
"Cron runner active" : "Cron runner active" ,
"Last heartbeat" : "Last heartbeat" ,
"Last runner result" : "Last runner result" ,
"Runner lock not acquired" : "Runner lock not acquired" ,
2026-03-04 15:56:58 +01:00
"Locale" : "Locale" ,
"Learning path" : "Learning path" ,
"Concepts" : "Concepts" ,
"How-to guides" : "How-to guides" ,
"Contributor guide" : "Contributor guide" ,
"System audit" : "System audit" ,
"System audit logs" : "System audit logs" ,
"View system audit entry" : "View system audit entry" ,
"System audit entry not found" : "System audit entry not found" ,
"Enable system audit log" : "Enable system audit log" ,
"Purge system audit logs" : "Purge system audit logs" ,
"Purge expired system audit entries?" : "Purge expired system audit entries?" ,
"%d system audit entries purged" : "%d system audit entries purged" ,
"All outcomes" : "All outcomes" ,
"All channels" : "All channels" ,
"Event type" : "Event type" ,
"Outcome" : "Outcome" ,
"Actor" : "Actor" ,
"Actor tenant" : "Actor tenant" ,
"Event details" : "Event details" ,
"Target type" : "Target type" ,
"IP hash" : "IP hash" ,
"User agent hash" : "User agent hash" ,
"Channel" : "Channel" ,
"Denied" : "Denied" ,
"Event" : "Event" ,
"Metadata" : "Metadata" ,
"Select users" : "Select users" ,
"Select actions" : "Select actions" ,
"Select statuses" : "Select statuses" ,
"Select triggers" : "Select triggers" ,
"Tenant #%d" : "Tenant #%d" ,
"Tenant #%d (deleted)" : "Tenant #%d (deleted)" ,
"Select event types" : "Select event types" ,
"Select actor users" : "Select actor users" ,
"User #%d" : "User #%d" ,
"User #%d (deleted)" : "User #%d (deleted)" ,
"Retention (days)" : "Retention (days)" ,
2026-03-06 00:44:52 +01:00
"Frontend telemetry" : "Frontend telemetry" ,
"Enable frontend telemetry" : "Enable frontend telemetry" ,
"Sampling rate" : "Sampling rate" ,
"Allowed telemetry events" : "Allowed telemetry events" ,
"warnOnce warnings" : "warnOnce warnings" ,
"AJAX errors" : "AJAX errors" ,
"The percentage of users who will have telemetry enabled." : "The percentage of users who will have telemetry enabled." ,
"Advanced telemetry options" : "Advanced telemetry options" ,
2026-03-04 15:56:58 +01:00
"setting.system_audit_enabled" : "Enable/disable system audit logging" ,
"setting.system_audit_retention_days" : "Retention in days for system audit entries" ,
2026-03-06 00:44:52 +01:00
"setting.frontend_telemetry_enabled" : "Enable/disable secure frontend UX and error telemetry" ,
"setting.frontend_telemetry_sample_rate" : "Sampling rate between 0 and 1 for accepted frontend telemetry events" ,
"setting.frontend_telemetry_allowed_events" : "Allowed frontend telemetry event groups (warn_once, ajax_error)" ,
2026-03-04 15:56:58 +01:00
"System audit events (24h)" : "System audit events (24h)" ,
"System audit risks (24h)" : "System audit risks (24h)" ,
"Failed or denied" : "Failed or denied" ,
"Recent system audit risks (24h)" : "Recent system audit risks (24h)" ,
"Lifecycle runs (7d)" : "Lifecycle runs (7d)" ,
"Lifecycle risks (7d)" : "Lifecycle risks (7d)" ,
"Restore actions (7d)" : "Restore actions (7d)" ,
2026-03-07 21:21:47 +01:00
"Recent lifecycle risks (7d)" : "Recent lifecycle risks (7d)" ,
2026-03-09 20:47:21 +01:00
"Your session has expired. Please log in again." : "Your session timed out. Please sign in again. If you chose Remember me, sign-in can happen automatically." ,
2026-03-09 19:16:26 +01:00
"Failed to update role permissions" : "Failed to update role permissions" ,
2026-03-10 22:48:10 +01:00
"Failed to update permission roles" : "Failed to update permission roles" ,
"Login persistence" : "Login persistence" ,
"Controls remember-me token lifetime and Microsoft auto-remember behavior." : "Controls remember-me token lifetime and Microsoft auto-remember behavior." ,
"Remember token lifetime (days)" : "Remember token lifetime (days)" ,
"Allowed range: 1-365 days (default: 30)" : "Allowed range: 1-365 days (default: 30)" ,
"Microsoft Auto-Remember default" : "Microsoft Auto-Remember default" ,
"When enabled, successful Microsoft logins automatically persist a remember-me token (unless overridden per tenant)." : "When enabled, successful Microsoft logins automatically persist a remember-me token (unless overridden per tenant)." ,
"Inherit global default" : "Inherit global default" ,
"Force on" : "Force on" ,
"Force off" : "Force off" ,
"Controls whether Microsoft logins automatically persist a remember-me token." : "Controls whether Microsoft logins automatically persist a remember-me token." ,
2026-03-12 14:09:06 +01:00
"Complete" : "Complete" ,
"Incomplete" : "Incomplete" ,
"No domain restrictions" : "No domain restrictions" ,
"Configuration status" : "Configuration status" ,
"SSO setup is incomplete" : "SSO setup is incomplete" ,
"Complete the required Microsoft configuration before enforcing Microsoft-only login." : "Complete the required Microsoft configuration before enforcing Microsoft-only login." ,
"Login policy" : "Login policy" ,
"Allow Microsoft-only login (disable local password login)" : "Allow Microsoft-only login (disable local password login)" ,
"Remember login after Microsoft sign-in" : "Remember login after Microsoft sign-in" ,
"Access and profile sync" : "Access and profile sync" ,
"Profile sync" : "Profile sync" ,
"App credentials (advanced)" : "App credentials (advanced)" ,
2026-03-13 14:28:49 +01:00
"Remember token lifetime is invalid" : "Remember token lifetime is invalid" ,
"Session expiring" : "Session expiring" ,
"Your session will expire in {countdown}. Would you like to continue?" : "Your session will expire in {countdown}. Would you like to continue?" ,
"Extend session" : "Extend session" ,
feat: add read-only System Info admin page with health checks and module inventory
New page at /admin/system-info with three tabs:
- Overview: PHP version, SAPI, environment, 6 health checks (DB, schema,
storage, RBAC baseline, admin role, scheduler heartbeat)
- Modules: table of active modules with version, dependencies, permission count
- Permissions: active/inactive counts and per-source breakdown
Gated behind new system_info.view permission assigned to Admin role.
No mutations — purely diagnostic/observability.
Includes SystemHealthService, SystemInfoService, SystemHealthRepository
with interface, DI registration, i18n keys (de+en), idempotent DB update
script, and 17 new PHPUnit tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 15:08:02 +01:00
"Log out" : "Log out" ,
"System Info" : "System Info" ,
"Health Status" : "Health Status" ,
"Check" : "Check" ,
"Details" : "Details" ,
"PHP version" : "PHP version" ,
"PHP SAPI" : "PHP SAPI" ,
"Active modules" : "Active modules" ,
"No modules active." : "No modules active." ,
"Module" : "Module" ,
"Dependencies" : "Dependencies" ,
"Permission summary" : "Permission summary" ,
"Active permissions" : "Active permissions" ,
"Inactive (orphaned) permissions" : "Inactive (orphaned) permissions" ,
"Permissions by source" : "Permissions by source" ,
"Source" : "Source" ,
"No health checks available." : "No health checks available." ,
"Warning" : "Warning" ,
"Fail" : "Fail" ,
"Environment" : "Environment" ,
"Modules" : "Modules" ,
2026-03-24 14:51:40 +01:00
"Version" : "Version" ,
2026-03-25 07:26:04 +01:00
"Breadcrumb" : "Breadcrumb" ,
"LDAP Username" : "LDAP Username" ,
"Sign in with LDAP" : "Sign in with LDAP" ,
"LDAP login is not available for this tenant." : "LDAP login is not available for this tenant." ,
"Your email domain is not allowed for LDAP login on this tenant." : "Your email domain is not allowed for LDAP login on this tenant." ,
"LDAP server is not reachable. Please try again later." : "LDAP server is not reachable. Please try again later." ,
"Your LDAP account does not have an email address configured." : "Your LDAP account does not have an email address configured." ,
"LDAP host is required" : "LDAP host is required" ,
"LDAP base DN is required" : "LDAP base DN is required" ,
"LDAP port must be between 1 and 65535" : "LDAP port must be between 1 and 65535" ,
"Search filter must contain %s placeholder" : "Search filter must contain %s placeholder" ,
"LDAP-only login requires a complete configuration" : "LDAP-only login requires a complete configuration" ,
"Direct bind method requires a username format" : "Direct bind method requires a username format" ,
"Bind DN could not be encrypted" : "Bind DN could not be encrypted" ,
"Bind password could not be encrypted" : "Bind password could not be encrypted" ,
"Tenant LDAP settings could not be saved" : "Tenant LDAP settings could not be saved" ,
"Bind DN could not be decrypted" : "Bind DN could not be decrypted" ,
"Bind password could not be decrypted" : "Bind password could not be decrypted" ,
"LDAP login" : "LDAP login" ,
"LDAP setup is incomplete" : "LDAP setup is incomplete" ,
"LDAP connection settings" : "LDAP connection settings" ,
"Enable LDAP login for this tenant" : "Enable LDAP login for this tenant" ,
"LDAP Host" : "LDAP Host" ,
"Encryption" : "Encryption" ,
"None (not recommended)" : "None (not recommended)" ,
"Verify TLS certificate" : "Verify TLS certificate" ,
"Base DN" : "Base DN" ,
"Bind DN (service account)" : "Bind DN (service account)" ,
"Bind password" : "Bind password" ,
"Clear bind password" : "Clear bind password" ,
"Test connection" : "Test connection" ,
"Search and bind settings" : "Search and bind settings" ,
"Bind method" : "Bind method" ,
"Search then bind (recommended)" : "Search then bind (recommended)" ,
"Direct bind" : "Direct bind" ,
"User search filter" : "User search filter" ,
"Search scope" : "Search scope" ,
"Subtree (recursive)" : "Subtree (recursive)" ,
"One level" : "One level" ,
"Network timeout (seconds)" : "Network timeout (seconds)" ,
"Direct bind username format" : "Direct bind username format" ,
"Unique ID attribute" : "Unique ID attribute" ,
"Attribute mapping and sync" : "Attribute mapping and sync" ,
"Map application fields to LDAP directory attributes." : "Map application fields to LDAP directory attributes." ,
"Profile sync on LDAP login" : "Profile sync on LDAP login" ,
"Allow LDAP-only login (disable local password login)" : "Allow LDAP-only login (disable local password login)" ,
"Sync email" : "Sync email" ,
"AD: objectGUID, OpenLDAP: entryUUID, FreeIPA: ipaUniqueID" : "AD: objectGUID, OpenLDAP: entryUUID, FreeIPA: ipaUniqueID" ,
"Login could not be completed. Please contact your administrator." : "Login could not be completed. Please contact your administrator." ,
"Only for direct bind. Use %s as placeholder. Example: %s@corp.example.com or uid=%s,ou=People,dc=example,dc=com" : "Only for direct bind. Use %s as placeholder. Example: %s@corp.example.com or uid=%s,ou=People,dc=example,dc=com" ,
"Optional allow-list, comma or newline separated." : "Optional allow-list, comma or newline separated." ,
"Please enter your username and password." : "Please enter your username and password." ,
"Port" : "Port" ,
"Search-then-bind uses a service account to find the user DN first, then binds with the user credentials." : "Search-then-bind uses a service account to find the user DN first, then binds with the user credentials." ,
"Use %s as placeholder for the username. Examples: (&(objectClass=user)(sAMAccountName=%s)) for AD, (&(objectClass=inetOrgPerson)(uid=%s)) for OpenLDAP" : "Use %s as placeholder for the username. Examples: (&(objectClass=user)(sAMAccountName=%s)) for AD, (&(objectClass=inetOrgPerson)(uid=%s)) for OpenLDAP" ,
"Username or password not valid" : "Username or password not valid" ,
"Write-only. Leave empty to keep current value." : "Write-only. Leave empty to keep current value." ,
2026-03-25 07:48:13 +01:00
"Your account is deactivated." : "Your account is deactivated." ,
2026-04-06 11:58:14 +02:00
"LDAP" : "LDAP" ,
2026-04-13 19:06:12 +02:00
"LDAP attribute map could not be encoded" : "LDAP attribute map could not be encoded" ,
2026-04-06 11:58:14 +02:00
"Drop file here or click to select" : "Drop file here or click to select" ,
"Remove selected file" : "Remove selected file" ,
"Replace" : "Replace" ,
"Delete this image?" : "Delete this image?" ,
2026-04-06 22:21:39 +02:00
"Current image" : "Current image" ,
"Open navigation" : "Open navigation" ,
2026-04-21 13:43:16 +02:00
"Close navigation" : "Close navigation" ,
"Priority" : "Priority" ,
"Note" : "Note" ,
"Optional note..." : "Optional note..." ,
refactor(settings): remove global appearance settings — tenant is sole source
Removes the global app_theme, app_theme_user and app_primary_color settings
from the admin/settings area and the underlying service/cache/API/i18n/docs
layers. The tenant columns (tenants.primary_color, default_theme,
allow_user_theme) become the single source of truth for appearance.
Branding helpers are tenant-only and fall back to a hardcoded 'light' theme
with no brand color when no tenant context is available (login, error,
pre-session pages). The APP_THEME env var is removed.
Scope:
- UI: Appearance tab gone from /admin/settings; tenant edit form drops the
global-fallback color preview.
- Service: SettingsAppGateway no longer exposes setting-backed accessors
for theme/user-theme/primary-color. Theme catalog utilities (listThemes,
isAllowedTheme, normalizeTheme, resolveDefaultTheme) stay and are used
across Tenant / Auth / User flows; resolveDefaultTheme now hardcodes
'light' with a catalog fallback (no global/env lookup).
- AdminSettingsService: buildPageData, sanitization, audit snapshot, apply
step and cache payload are all stripped of the three keys. Dead helper
applyAppPrimaryColor + normalizePrimaryColor removed.
- Cache: SettingCacheService HOT_PATH_KEYS drops the three keys.
- API: /settings (GET/PUT) and /settings/public (GET) no longer expose
appearance fields; OpenAPI schemas pruned accordingly.
- Audit redaction list shortened.
- DB: db/init/init.sql seed rows removed. No migration for existing
installs — legacy rows stay inert.
- i18n + docs: setting.app_theme, setting.app_theme_user,
setting.app_primary_color removed from de+en locales; reference and
explanation docs updated.
- Tests: covering tests for the removed methods pruned; ThemeResolutionTest
rewritten for tenant-only semantics. One unrelated PHP-CS-Fixer issue in
UserRegistrar.php cleaned up to keep QG-006 green.
Workflow: .agents/runs/SETTINGS-APPEARANCE-TENANT-ONLY/ (gitignored).
Gates: QG-001..003, QG-006, QG-008 all pass (1985 tests, 28764 assertions).
Reviews: code, security, acceptance all pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 22:40:15 +02:00
"Security level updated" : "Security level updated" ,
"About" : "About" ,
"Call" : "Call" ,
"Copy email address" : "Copy email address" ,
"Copy phone number" : "Copy phone number" ,
"Copy mobile number" : "Copy mobile number" ,
"Hired" : "Hired" ,
"Primary" : "Primary" ,
"Send email" : "Send email" ,
feat(ui): token-select primitive for large multi-selects
Adds tokenSelectForm() in core/Support/helpers/ui.php: an inline
typeahead combobox + flat alphabetical removable list, designed for
selections that outgrow the chip-header of the vendor MultiSelect
(roles, permissions, and similar admin pickers).
Contract:
- Hidden <select multiple name="<name>[]"> is the form submission source —
consumers read via $request->body() verbatim, no parsing
- Items are ['id' => int, <labelKey> => string, 'key' => string?]
where labelKeys default to ['description', 'label', 'name']; 'key' is
an invisible fuzzy-match hint
- $labelOverrides lets callers swap emptyState / removeTooltip /
noMatches / clearAll / countSuffix / errorMessage with domain copy
- $disabled renders pure-presentation list (no combobox, no remove)
Runtime:
- initTokenSelect in web/js/components/app-token-select.js is registered
as 'token-select' in app-init.js; destroy()/cleanupFns contract
- Syncs the hidden <select> on every mutation and dispatches 'change'
so dependent UI can react
Wired up: pages/admin/permissions/_form.phtml (assigned roles),
pages/admin/roles/_form.phtml (permissions + assignable roles).
Helper contract lives in tests/Support/Helpers/TokenSelectFormHelperTest.php;
runtime contract + entrypoint registration + host usage are enforced by
FrontendRuntime*ContractTest.php.
Coexists with multiSelectForm() — pick tokenSelectForm() when the
selected set can grow beyond ~10 items or typeahead is expected.
Docs in CLAUDE.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:52:32 +02:00
"Summary" : "Summary" ,
"token_select.clear_all" : "Clear all" ,
"token_select.empty_state_title" : "No items selected" ,
"token_select.error_invalid_items" : "Items could not be loaded." ,
"token_select.no_matches" : "No matches" ,
"token_select.remove" : "Remove" ,
"token_select.selected_count_suffix" : "selected"
2026-02-04 23:31:53 +01:00
}