{ "navigation": { "heading": "Extensions" }, "enterpriseFeature": { "title": "Enterprise Feature", "description": "{{feature}} require Enterprise Edition. Please upgrade to access this feature." }, "settings": { "title": "Extension Management", "description": "Install, configure, and manage extensions to extend Alga PSA functionality.", "tabs": { "manage": "Manage", "install": "Install" }, "enterpriseOnly": { "title": "Enterprise feature", "description": "Extensions are available in the Enterprise edition of Alga PSA." }, "links": { "needLogs": "Need extension logs?", "debugConsole": "Open Service Proxy Demo Debug Console" }, "loading": { "extensions": "Loading extensions...", "installer": "Loading installer..." }, "featureNames": { "settings": "Extension settings", "details": "Extension details", "permissions": "Extension permissions", "management": "Extensions management", "installer": "Extension installer" }, "heading": "Extension Settings", "notFound": "Extension not found", "notFoundDescription": "The extension you're looking for doesn't exist or you don't have access to it.", "backToExtensions": "Back to Extensions", "nameSuffix": "{{name}} Settings", "resetToDefaults": "Reset to Defaults", "saveChanges": "Save Changes", "confirmReset": "Are you sure you want to reset all settings to their default values?", "cardTitle": "Extension Settings", "cardDescription": "Configure settings for this extension. These settings will be used by the extension to customize its behavior.", "noConfigurable": "This extension doesn't have any configurable settings.", "customConfig": { "title": "Custom Configuration", "description": "Add custom configuration values for this extension. These are provided to the extension alongside the settings defined above.", "empty": "No custom configuration entries.", "addEntry": "Add Entry", "keyPlaceholder": "Key (e.g. MY_API_KEY)", "valuePlaceholder": "Value", "markSensitive": "Mark as sensitive", "markPublic": "Mark as public" }, "schedules": { "title": "Schedules", "description": "Configure scheduled tasks for this extension by invoking a manifest-declared API endpoint on a cron schedule. On extension updates, schedules are remapped by endpoint method/path; updates may be blocked if a scheduled endpoint is removed.", "loading": "Loading schedules…", "noEndpoints": "This extension does not declare any API endpoints, so there is nothing to schedule.", "endpoint": "Endpoint", "cron": "Cron", "timezone": "Timezone", "selectEndpoint": "Select an endpoint", "payloadLabel": "Payload (JSON, optional)", "payloadHelp": "For GET endpoints, payload is ignored. For POST endpoints, payload becomes the request body. Avoid including secrets in payloads; use the extension's config/secrets instead.", "create": "Create schedule", "creating": "Creating...", "refresh": "Refresh", "empty": "No schedules configured.", "lastStatus": " • last: {{status}}", "save": "Save", "cancel": "Cancel", "edit": "Edit", "runNow": "Run now", "delete": "Delete", "confirmDelete": "Delete this schedule?" }, "secrets": { "title": "Secret Values", "descriptionPrefix": "Secrets are encrypted at rest.", "descriptionHasStored": "Leave a field blank to keep the existing secret.", "descriptionNoStored": "Provide values for required secrets before saving.", "version": "Version: {{version}}", "valuePlaceholder": "Enter secret value", "storedHint": "Stored secret present. Enter a new value to rotate." }, "selectOption": "Select an option" }, "communityEdition": { "listUnavailable": "Extensions not available in this edition", "dynamicListUnavailable": "Extensions not available in Community Edition", "dynamicInstallUnavailable": "Extension installation not available in Community Edition" }, "page": { "metadata": { "title": "Extensions", "description": "Manage extensions" }, "title": "Extensions", "description": "Extensions management is available in Enterprise Edition." }, "detail": { "metadataTitle": "Extensions - Enterprise Feature", "extensionId": "Extension ID: {{id}}" }, "runtime": { "metadataTitle": "Extension", "loadError": "Failed to load extension runtime info", "notFoundTitle": "Extension not found.", "goToExtensions": "Go to extensions", "bundleUnavailableTitle": "Extension bundle not available.", "bundleUnavailableDescription": "The extension bundle is missing or has not been uploaded.", "goToDetails": "Go to extension details", "runtimeDomainUnavailableTitle": "Extension runtime domain not available.", "runtimeDomainUnavailableDescription": "Reprovision the extension from Settings -> Extensions -> select extension -> Provision." }, "detailsPage": { "metadata": { "title": "Extension Details", "description": "View extension details" }, "title": "Extension Details", "description": "Extension details are available in Enterprise Edition." }, "settingsPage": { "metadata": { "title": "Extension Settings", "description": "Configure extension settings" }, "title": "Extension Settings", "description": "Extension settings are available in Enterprise Edition." }, "details": { "label": "Extension Details", "fallbackTitle": "Extension Details", "notFoundTitle": "Extension Not Found", "enabled": "Enabled", "disabled": "Disabled", "settings": "Settings", "disable": "Disable", "enable": "Enable", "remove": "Remove", "loading": "Loading extension details...", "error": "Error", "sectionInfo": "Extension Information", "runtimeDomain": "Runtime Domain", "open": "Open", "copy": "Copy", "provision": "Provision", "description": "Description", "version": "Version", "author": "Author", "unknownAuthor": "Unknown", "homepage": "Homepage", "license": "License", "installedDate": "Installed Date", "lastUpdated": "Last Updated", "sectionPermissions": "Permissions", "noPermissions": "This extension does not require any permissions.", "sectionVersions": "Versions", "loadingVersions": "Loading versions…", "noVersions": "No published versions available.", "colVersion": "Version", "colPublished": "Published", "colContentHash": "Content hash", "colInstalled": "Installed", "yes": "Yes", "no": "No", "sectionComponents": "Components", "noComponents": "This extension does not define any components.", "colType": "Type", "colId": "ID", "colEntryPoint": "Entry Point", "colMountPoint": "Mount Point", "infoTitle": "Extension Information", "infoInstalled": "This extension was installed on {{installedDate}} and last updated on {{updatedDate}}.", "infoRefreshHint": "Enabling or disabling the extension may require a page refresh for changes to take effect.", "settingsCountOne": "This extension has {{count}} configurable setting.", "settingsCountOther": "This extension has {{count}} configurable settings.", "manageSettings": "Manage Settings", "removeTitle": "Remove Extension", "removeMessage": "Are you sure you want to remove this extension? This action cannot be undone.", "confirmRemove": "Remove", "cancel": "Cancel" }, "detailsModal": { "description": "Description", "version": "Version", "author": "Author", "unknownAuthor": "Unknown", "status": "Status", "enabled": "Enabled", "disabled": "Disabled", "created": "Created", "lastUpdated": "Last Updated", "extensionId": "Extension ID", "settingsComingSoon": "Extension settings will be available in the next update.", "settings": "Settings", "disable": "Disable", "enable": "Enable", "remove": "Remove", "removeTitle": "Remove Extension", "removeMessage": "Are you sure you want to remove this extension? This action cannot be undone.", "confirmRemove": "Remove", "cancel": "Cancel" }, "simple": { "heading": "Extensions", "loading": "Loading extensions...", "error": "Error", "emptyTitle": "No extensions installed", "emptyDescription": "Install extensions to add new features and functionality to Alga PSA.", "colExtension": "Extension", "colVersion": "Version", "colAuthor": "Author", "colStatus": "Status", "colActions": "Actions", "unknownAuthor": "Unknown", "enabled": "Enabled", "disabled": "Disabled", "view": "View", "settings": "Settings", "settingsComingSoon": "Extension settings will be available in the next update.", "disable": "Disable", "enable": "Enable", "remove": "Remove", "removeFailed": "Failed to remove extension", "toggleDisableFailed": "Failed to disable extension", "toggleEnableFailed": "Failed to enable extension", "loadFailed": "Failed to load extensions", "removeTitle": "Remove Extension", "removeMessage": "Are you sure you want to remove this extension? This action cannot be undone.", "confirmRemove": "Remove", "cancel": "Cancel" }, "list": { "label": "Extensions Management", "heading": "Extensions", "loading": "Loading extensions...", "error": "Error", "loadFailed": "Failed to load extensions", "emptyTitle": "No extensions installed", "emptyDescription": "Install extensions to add new features and functionality to Alga PSA.", "colExtension": "Extension", "colVersion": "Version", "colAuthor": "Author", "colDomain": "Domain", "colActions": "Actions", "enabled": "Enabled", "disabled": "Disabled", "view": "View", "settings": "Settings", "provision": "Provision", "disable": "Disable", "enable": "Enable", "remove": "Remove", "debug": "Debug", "removeTitle": "Remove Extension", "removeMessage": "Are you sure you want to remove this extension? This action cannot be undone.", "confirmRemove": "Remove", "cancel": "Cancel", "dialogVersion": "Version:", "dialogAuthor": "Author:", "dialogDomain": "Domain:", "dialogStatus": "Status:" }, "installer": { "title": "Install Extension", "description": "Choose a signed bundle and install it.", "bundleLabel": "Extension Bundle (.tar.zst)", "bundleHint": "The manifest will be extracted automatically from the bundle.", "advancedOptions": "Advanced Options", "customManifestLabel": "Custom Manifest (optional override)", "customManifestPlaceholder": "Leave empty to use manifest from bundle, or paste custom manifest.json here", "manifestJsonLabel": "Manifest JSON", "manifestJsonPlaceholder": "Paste the manifest.json content here", "browse": "Browse", "manifestExtractFailed": "Could not extract manifest from bundle. Please provide it manually.", "install": "Install", "installing": "Installing…", "reset": "Reset", "finalize": "Finalize", "finalizing": "Finalizing…", "cancel": "Cancel", "manageExtensions": "Manage Extensions", "installAnother": "Install Another", "error": "Error", "installed": "Extension installed", "installedName": "{{name}} v{{version}}", "uploadNoKey": "Upload succeeded but no key was returned", "manifestMissing": "Could not extract valid manifest from bundle.", "finalizeError": "Unexpected error finalizing installation", "installCompleteError": "Extension finalized, but install did not complete", "installUnexpected": "Unexpected error during installation", "finalizeRequireManifest": "Please paste the manifest JSON before finalizing.", "finalizeProvidedFailed": "Failed to finalize with provided manifest" }, "installSimple": { "title": "Install Extension", "heading": "Extension Installation", "description": "Use the full extension installer for advanced options." }, "clientPortal": { "loadError": "Failed to load extension runtime info", "notFoundTitle": "Extension not found.", "backToDashboard": "Back to Dashboard", "bundleUnavailableTitle": "Extension bundle not available.", "bundleUnavailableDescription": "The extension bundle is missing or has not been uploaded.", "runtimeDomainUnavailableTitle": "Extension runtime domain not available.", "runtimeDomainUnavailableDescription": "Extension domain not provisioned." }, "messages": { "loadSettingsFailed": "Failed to load extension settings.", "refreshSchedulesFailed": "Failed to refresh schedules.", "requiredSecretsMissing": "Please provide values for required secrets before saving.", "enterSecretValues": "Enter secret values before saving.", "invalidCustomKey": "Custom keys can only contain letters, numbers, underscores, dots, and dashes.", "saveSettingsFailed": "Failed to save extension settings.", "updateSecretsFailed": "Failed to update extension secrets.", "secretsUpdated": "Extension secrets updated.", "settingsSaved": "Extension settings saved successfully.", "resetSettingsFailed": "Failed to reset extension settings.", "settingsReset": "Settings reset to default values.", "invalidPayloadJson": "Payload must be valid JSON.", "createScheduleFailed": "Failed to create schedule.", "scheduleCreated": "Schedule created.", "updateScheduleFailed": "Failed to update schedule.", "scheduleUpdated": "Schedule updated.", "runScheduleFailed": "Failed to run schedule.", "scheduleRunEnqueued": "Schedule run enqueued.", "deleteScheduleFailed": "Failed to delete schedule.", "scheduleDeleted": "Schedule deleted.", "toggleFailed": "Failed to update extension state", "extensionEnabled": "Extension enabled", "extensionDisabled": "Extension disabled", "enableFailed": "Failed to enable extension", "disableFailed": "Failed to disable extension", "removeFailed": "Failed to remove extension", "extensionRemoved": "Extension removed", "reprovisionFailed": "Failed to reprovision", "manifestReadFailed": "Failed to read manifest file", "invalidBundleExtension": "File must end with \".tar.zst\": {{filename}}" }, "debug": { "scopeToOneInstall": "Scope to one install", "overrideTenantContext": "Override tenant context", "matchRequestId": "Match x-request-id / context.request_id" } }