616b221c92
Add a new "webhook" provider type that accepts arbitrary HTTP POST payloads, extracts template variables via user-defined JSONPath mappings, and dispatches notifications through the existing pipeline. Supports three auth modes (HMAC-SHA256, Bearer token, none), bounded JSONPath cache, and 1MB payload limit. Full stack: core provider + event parser, API endpoint, DB migration, capabilities, seeds, default templates (EN/RU), frontend descriptor, i18n.
1002 lines
39 KiB
JSON
1002 lines
39 KiB
JSON
{
|
|
"app": {
|
|
"name": "Notify Bridge",
|
|
"tagline": "Service notifications"
|
|
},
|
|
"nav": {
|
|
"dashboard": "Dashboard",
|
|
"providers": "Providers",
|
|
"notificationTrackers": "Notif. Trackers",
|
|
"trackingConfigs": "Tracking",
|
|
"templateConfigs": "Templates",
|
|
"telegramBots": "Bots",
|
|
"targets": "Targets",
|
|
"commandConfigs": "Cmd Configs",
|
|
"commandTrackers": "Cmd Trackers",
|
|
"cmdTemplateConfigs": "Cmd Templates",
|
|
"users": "Users",
|
|
"settings": "Settings",
|
|
"logout": "Logout",
|
|
"notification": "Notification",
|
|
"commands": "Commands",
|
|
"bots": "Bots",
|
|
"trackers": "Trackers",
|
|
"configs": "Configs",
|
|
"templates": "Templates",
|
|
"telegram": "Telegram",
|
|
"email": "Email",
|
|
"matrix": "Matrix",
|
|
"common": "Common",
|
|
"targetTelegram": "Telegram",
|
|
"targetWebhook": "Webhook",
|
|
"targetEmail": "Email",
|
|
"targetDiscord": "Discord",
|
|
"targetSlack": "Slack",
|
|
"targetNtfy": "ntfy",
|
|
"targetMatrix": "Matrix",
|
|
"targetBroadcast": "Broadcast",
|
|
"automation": "Automation",
|
|
"actions": "Actions"
|
|
},
|
|
"auth": {
|
|
"signIn": "Sign in",
|
|
"signInTitle": "Sign in to your account",
|
|
"signingIn": "Signing in...",
|
|
"username": "Username",
|
|
"password": "Password",
|
|
"confirmPassword": "Confirm password",
|
|
"setupTitle": "Welcome",
|
|
"setupDescription": "Create your admin account to get started",
|
|
"createAccount": "Create account",
|
|
"creatingAccount": "Creating account...",
|
|
"passwordMismatch": "Passwords do not match",
|
|
"passwordTooShort": "Password must be at least 8 characters",
|
|
"or": "or"
|
|
},
|
|
"dashboard": {
|
|
"title": "Dashboard",
|
|
"description": "Overview of your Notify Bridge setup",
|
|
"providers": "Providers",
|
|
"activeTrackers": "Active Trackers",
|
|
"targets": "Targets",
|
|
"recentEvents": "Events",
|
|
"chart": "Event chart",
|
|
"noEvents": "No events yet. Create a tracker to start monitoring.",
|
|
"loading": "Loading...",
|
|
"justNow": "just now",
|
|
"minutesAgo": "{n}m ago",
|
|
"hoursAgo": "{n}h ago",
|
|
"daysAgo": "{n}d ago",
|
|
"assetsAdded": "assets added",
|
|
"assetsRemoved": "assets removed",
|
|
"collectionRenamed": "collection renamed",
|
|
"collectionDeleted": "collection deleted",
|
|
"sharingChanged": "sharing changed",
|
|
"searchEvents": "Search events...",
|
|
"allEvents": "All Events",
|
|
"filterAssetsAdded": "Assets Added",
|
|
"filterAssetsRemoved": "Assets Removed",
|
|
"filterRenamed": "Renamed",
|
|
"filterDeleted": "Deleted",
|
|
"filterSharingChanged": "Sharing Changed",
|
|
"allProviders": "All Providers",
|
|
"newestFirst": "Newest first",
|
|
"oldestFirst": "Oldest first",
|
|
"loadingEvents": "Loading events...",
|
|
"asset": "asset",
|
|
"assets": "assets",
|
|
"eventActivity": "Event Activity",
|
|
"last14days": "Last 14 days",
|
|
"event": "event",
|
|
"events": "events",
|
|
"noChartData": "No event data yet"
|
|
},
|
|
"providers": {
|
|
"title": "Providers",
|
|
"description": "Manage service provider connections",
|
|
"addProvider": "Add Provider",
|
|
"cancel": "Cancel",
|
|
"type": "Provider Type",
|
|
"name": "Name",
|
|
"url": "Provider URL",
|
|
"urlPlaceholder": "http://provider:2283",
|
|
"apiKey": "API Key",
|
|
"apiKeyKeep": "API Key (leave empty to keep current)",
|
|
"connecting": "Connecting...",
|
|
"noProviders": "No providers configured yet.",
|
|
"delete": "Delete",
|
|
"confirmDelete": "Delete this provider?",
|
|
"online": "Online",
|
|
"offline": "Offline",
|
|
"checking": "Checking...",
|
|
"typeImmich": "Immich",
|
|
"typeGitea": "Gitea",
|
|
"typePlanka": "Planka",
|
|
"typeScheduler": "Scheduler",
|
|
"typeNut": "NUT (UPS)",
|
|
"typeGooglePhotos": "Google Photos",
|
|
"typeWebhook": "Generic Webhook",
|
|
"loadError": "Failed to load providers.",
|
|
"externalDomain": "External Domain",
|
|
"optional": "optional",
|
|
"urlApiKeyRequired": "URL and API Key are required",
|
|
"externalDomainHint": "Public-facing URL for notification links. Falls back to server URL.",
|
|
"webhookSecret": "Webhook Secret",
|
|
"webhookSecretKeep": "Webhook Secret (leave empty to keep current)",
|
|
"webhookSecretHint": "Shared secret for HMAC-SHA256 signature verification. Set the same secret in Gitea webhook settings.",
|
|
"plankaWebhookSecretHint": "Bearer token for webhook authentication. Set the same token as WEBHOOK_ACCESS_TOKEN in Planka.",
|
|
"plankaApiKeyHint": "Optional. Needed for connection testing and board listing.",
|
|
"plankaWebhookUrlHint": "Set this as the Webhook URL in Planka environment config (relative to your bridge host).",
|
|
"authMode": "Authentication Mode",
|
|
"authModeHint": "Choose hmac_sha256, bearer_token, or none",
|
|
"genericWebhookSecretHint": "Secret for HMAC-SHA256 or Bearer token authentication. Leave empty for no authentication.",
|
|
"webhookSecretRequired": "Webhook secret is required",
|
|
"apiToken": "API Token",
|
|
"apiTokenHint": "Optional. Needed for connection testing and repository listing.",
|
|
"webhookUrl": "Webhook URL",
|
|
"webhookUrlHint": "Set this as the Target URL in Gitea webhook settings (relative to your bridge host).",
|
|
"nutHost": "NUT Server Host",
|
|
"nutHostPlaceholder": "192.168.1.100 or ups.local",
|
|
"nutPort": "NUT Server Port",
|
|
"nutUsername": "Username",
|
|
"nutPassword": "Password",
|
|
"nutUsernameHint": "Optional — only needed if upsd requires authentication",
|
|
"nutPasswordHint": "Optional — upsd user password",
|
|
"gpClientId": "OAuth Client ID",
|
|
"gpClientSecret": "OAuth Client Secret",
|
|
"gpClientSecretKeep": "OAuth Client Secret (leave empty to keep current)",
|
|
"gpRefreshToken": "Refresh Token",
|
|
"gpRefreshTokenKeep": "Refresh Token (leave empty to keep current)",
|
|
"gpRefreshTokenHint": "Obtain from Google OAuth Playground (developers.google.com/oauthplayground) with the Photos Library API scope.",
|
|
"gpAllFieldsRequired": "Client ID, Client Secret, and Refresh Token are all required",
|
|
"testAndSave": "Test & Save",
|
|
"saveWithoutTest": "Save without testing"
|
|
},
|
|
"notificationTracker": {
|
|
"title": "Notification Trackers",
|
|
"description": "Monitor albums for changes",
|
|
"newTracker": "New Tracker",
|
|
"cancel": "Cancel",
|
|
"name": "Name",
|
|
"namePlaceholder": "Family photos tracker",
|
|
"server": "Provider",
|
|
"selectServer": "Select provider...",
|
|
"albums": "Albums",
|
|
"selectAlbums": "Select albums...",
|
|
"repositories": "Repositories",
|
|
"selectRepositories": "Select repositories...",
|
|
"boards": "Boards",
|
|
"selectBoards": "Select boards...",
|
|
"upsDevices": "UPS Devices",
|
|
"selectUpsDevices": "Select UPS devices...",
|
|
"eventTypes": "Event Types",
|
|
"notificationTargets": "Notification Targets",
|
|
"scanInterval": "Scan Interval (seconds)",
|
|
"scheduleType": "Schedule",
|
|
"intervalMode": "Interval",
|
|
"cronMode": "Cron expression",
|
|
"cronExpression": "Cron expression",
|
|
"cronHint": "Standard 5-field cron: minute hour day month weekday. Example: 0 9 * * 1-5 (weekdays at 9:00)",
|
|
"customVariables": "Custom Variables",
|
|
"customVariablesHint": "Define key-value pairs available in templates as {{ key }}.",
|
|
"addVariable": "Add variable",
|
|
"createTracker": "Create Tracker",
|
|
"noTrackers": "No trackers yet. Add a provider first, then create a tracker.",
|
|
"active": "Active",
|
|
"paused": "Paused",
|
|
"pause": "Pause",
|
|
"resume": "Resume",
|
|
"delete": "Delete",
|
|
"confirmDelete": "Delete this tracker?",
|
|
"albums_count": "album(s)",
|
|
"repos_count": "repo(s)",
|
|
"boards_count": "board(s)",
|
|
"devices_count": "device(s)",
|
|
"collections_count": "collection(s)",
|
|
"every": "every",
|
|
"trackImages": "Track images",
|
|
"trackVideos": "Track videos",
|
|
"favoritesOnly": "Favorites only",
|
|
"includePeople": "Include people in notifications",
|
|
"includeAssetDetails": "Include asset details",
|
|
"maxAssetsToShow": "Max assets to show",
|
|
"sortBy": "Sort by",
|
|
"sortOrder": "Sort order",
|
|
"sortNone": "Original order",
|
|
"sortDate": "Date",
|
|
"sortRating": "Rating",
|
|
"sortName": "Name",
|
|
"sortRandom": "Random",
|
|
"ascending": "Ascending",
|
|
"descending": "Descending",
|
|
"quietHoursStart": "Quiet hours start",
|
|
"quietHoursEnd": "Quiet hours end",
|
|
"batchDuration": "Batch duration (seconds)",
|
|
"defaultTrackingConfig": "Default tracking config",
|
|
"defaultTemplateConfig": "Default template config",
|
|
"linkedTargets": "targets",
|
|
"noLinkedTargets": "No targets linked. Add a target below.",
|
|
"addTarget": "Add target",
|
|
"selectTarget": "Select target to add...",
|
|
"alreadyLinked": "Already linked",
|
|
"testBasic": "Send test message",
|
|
"testPeriodic": "Test periodic summary",
|
|
"testScheduled": "Test scheduled assets",
|
|
"testMemory": "Test memory / On This Day",
|
|
"checkingLinks": "Checking links...",
|
|
"missingLinksTitle": "Albums Missing Public Links",
|
|
"missingLinksDesc": "The following albums don't have public shared links. Without links, notification recipients won't be able to view photos.",
|
|
"expired": "Expired",
|
|
"passwordProtected": "Password Protected",
|
|
"noLink": "No Link",
|
|
"saveWithoutLinks": "Save without links",
|
|
"createLinks": "Create {count} link(s)",
|
|
"linksNote": "You can also create links manually in Immich."
|
|
},
|
|
"templates": {
|
|
"title": "Templates",
|
|
"description": "Jinja2 message templates for notifications",
|
|
"newTemplate": "New Template",
|
|
"cancel": "Cancel",
|
|
"name": "Name",
|
|
"body": "Template Body (Jinja2)",
|
|
"variables": "Variables",
|
|
"preview": "Preview",
|
|
"edit": "Edit",
|
|
"delete": "Delete",
|
|
"confirmDelete": "Delete this template?",
|
|
"create": "Create Template",
|
|
"update": "Update Template",
|
|
"noTemplates": "No templates yet. A default template will be used if none is configured.",
|
|
"eventType": "Event type",
|
|
"allEvents": "All events",
|
|
"assetsAdded": "Assets added",
|
|
"assetsRemoved": "Assets removed",
|
|
"albumRenamed": "Album renamed",
|
|
"albumDeleted": "Album deleted"
|
|
},
|
|
"targets": {
|
|
"title": "Targets",
|
|
"description": "Notification delivery destinations",
|
|
"descTelegram": "Telegram chat destinations for notifications",
|
|
"descWebhook": "HTTP webhook endpoints for notification delivery",
|
|
"descEmail": "Email recipients for notifications",
|
|
"descDiscord": "Discord channel webhooks for notifications",
|
|
"descSlack": "Slack channel webhooks for notifications",
|
|
"descNtfy": "ntfy push notification topics",
|
|
"descMatrix": "Matrix room destinations for notifications",
|
|
"descBroadcast": "Send to multiple targets at once",
|
|
"childTargets": "target(s)",
|
|
"selectChildTargets": "Select child targets",
|
|
"noChildTargets": "No child targets configured.",
|
|
"noChildTargetsAvailable": "Create other targets first, then add them here.",
|
|
"addTarget": "Add Target",
|
|
"cancel": "Cancel",
|
|
"type": "Type",
|
|
"name": "Name",
|
|
"namePlaceholder": "My notifications",
|
|
"botToken": "Bot Token",
|
|
"chatId": "Chat ID",
|
|
"webhookUrl": "Webhook URL",
|
|
"create": "Add Target",
|
|
"test": "Test",
|
|
"delete": "Delete",
|
|
"confirmDelete": "Delete this target?",
|
|
"noTargets": "No notification targets configured yet.",
|
|
"testSent": "Test sent successfully!",
|
|
"aiCaptions": "Enable AI captions",
|
|
"telegramSettings": "Telegram Settings",
|
|
"maxMedia": "Max media to send",
|
|
"maxGroupSize": "Max group size",
|
|
"chunkDelay": "Delay between groups (ms)",
|
|
"maxAssetSize": "Max asset size (MB)",
|
|
"videoWarning": "Video size warning",
|
|
"disableUrlPreview": "Disable link previews",
|
|
"sendLargeAsDocuments": "Send large photos as documents",
|
|
"chatAction": "Chat action",
|
|
"chatActionNone": "None (no action)",
|
|
"chatActionTyping": "Typing",
|
|
"chatActionUploadPhoto": "Upload Photo",
|
|
"chatActionUploadVideo": "Upload Video",
|
|
"chatActionUploadDoc": "Upload Doc",
|
|
"chatActionRecordVideo": "Record Video",
|
|
"chatActionRecordVoice": "Record Voice",
|
|
"typeTelegram": "Telegram",
|
|
"typeWebhook": "Webhook",
|
|
"overrideUsername": "Override bot username",
|
|
"ntfyServer": "ntfy Server URL",
|
|
"ntfyTopic": "Topic",
|
|
"ntfyToken": "Auth Token",
|
|
"ntfyTokenPlaceholder": "Optional (for protected topics)",
|
|
"selectEmailBot": "Select Email Bot",
|
|
"selectMatrixBot": "Select Matrix Bot",
|
|
"recipientEmail": "Recipient Email",
|
|
"matrixRoomId": "Room ID",
|
|
"receivers": "Receivers",
|
|
"noReceivers": "No receivers yet",
|
|
"alreadyAdded": "already added",
|
|
"addReceiver": "Add Receiver",
|
|
"receiverAdded": "Receiver added",
|
|
"receiverDeleted": "Receiver deleted",
|
|
"receiverUpdated": "Receiver updated",
|
|
"confirmDeleteReceiver": "Delete this receiver?",
|
|
"receiverEnabled": "Receiver enabled",
|
|
"receiverDisabled": "Receiver disabled"
|
|
},
|
|
"users": {
|
|
"title": "Users",
|
|
"description": "Manage user accounts (admin only)",
|
|
"addUser": "Add User",
|
|
"cancel": "Cancel",
|
|
"username": "Username",
|
|
"password": "Password",
|
|
"role": "Role",
|
|
"roleUser": "User",
|
|
"roleAdmin": "Admin",
|
|
"create": "Create User",
|
|
"delete": "Delete",
|
|
"confirmDelete": "Delete this user?",
|
|
"joined": "joined",
|
|
"noUsers": "No users found"
|
|
},
|
|
"telegramBot": {
|
|
"title": "Telegram Bots",
|
|
"description": "Register and manage Telegram bots",
|
|
"addBot": "Add Bot",
|
|
"name": "Display name",
|
|
"namePlaceholder": "Family notifications bot",
|
|
"token": "Bot Token",
|
|
"tokenPlaceholder": "123456:ABC-DEF...",
|
|
"noBots": "No bots registered yet.",
|
|
"chats": "Chats",
|
|
"noChats": "No chats found. Send a message to the bot first.",
|
|
"refreshChats": "Refresh",
|
|
"selectBot": "Select bot",
|
|
"selectChat": "Select chat",
|
|
"private": "Private",
|
|
"group": "Group",
|
|
"supergroup": "Supergroup",
|
|
"channel": "Channel",
|
|
"confirmDelete": "Delete this bot?",
|
|
"commands": "Commands",
|
|
"enabledCommands": "Enabled commands",
|
|
"defaultCount": "Default count",
|
|
"responseMode": "Response mode",
|
|
"modeMedia": "Media (files)",
|
|
"modeText": "Text only",
|
|
"botLocale": "Bot language",
|
|
"rateLimits": "Rate Limits",
|
|
"rateSearch": "Search cooldown",
|
|
"rateFind": "Find cooldown",
|
|
"rateDefault": "Default cooldown",
|
|
"noCommandsForProvider": "This provider type does not support bot commands.",
|
|
"syncCommands": "Sync Commands",
|
|
"discoverChats": "Discover chats from Telegram",
|
|
"clickToCopy": "Click to copy chat ID",
|
|
"chatsDiscovered": "Chats discovered",
|
|
"chatDeleted": "Chat removed",
|
|
"chatName": "Name",
|
|
"chatType": "Type",
|
|
"chatLang": "Lang",
|
|
"langOverride": "Override",
|
|
"cmds": "Cmds",
|
|
"commandsToggle": "Toggle command listening for this chat",
|
|
"chatId": "Chat ID",
|
|
"languageUpdated": "Chat language updated",
|
|
"cmdLocale": "Bot language",
|
|
"searchCooldown": "Search cooldown (s)",
|
|
"saveConfig": "Save config",
|
|
"commandsSynced": "Commands synced with Telegram",
|
|
"registerWebhook": "Register webhook",
|
|
"unregisterWebhook": "Unregister webhook",
|
|
"webhookRegistered": "Webhook registered",
|
|
"webhookUnregistered": "Webhook unregistered",
|
|
"updateMode": "Update mode",
|
|
"polling": "Polling",
|
|
"webhook": "Webhook",
|
|
"webhookStatus": "Webhook status",
|
|
"webhookActive": "Webhook active",
|
|
"webhookNotSet": "No webhook set",
|
|
"webhookVerified": "Webhook verified",
|
|
"webhookError": "Last error",
|
|
"pendingUpdates": "pending updates",
|
|
"pollingActive": "Polling active",
|
|
"telegramSettings": "Telegram Settings",
|
|
"externalUrl": "External URL",
|
|
"externalUrlHint": "Public URL of this Notify Bridge instance. Required for webhook mode.",
|
|
"webhookSecret": "Webhook secret",
|
|
"webhookSecretHint": "Optional secret token to verify webhook requests from Telegram",
|
|
"cacheTtl": "Media cache TTL (hours)",
|
|
"cacheTtlHint": "How long to cache uploaded Telegram file_ids before re-uploading (default: 48h)",
|
|
"settingsSaved": "Settings saved",
|
|
"noExternalDomain": "External domain URL not configured"
|
|
},
|
|
"trackingConfig": {
|
|
"title": "Tracking Configs",
|
|
"description": "Define what events and assets to react to",
|
|
"newConfig": "New Config",
|
|
"name": "Name",
|
|
"namePlaceholder": "Default tracking",
|
|
"noConfigs": "No tracking configs yet.",
|
|
"unknownProviderType": "Unknown provider type",
|
|
"eventTracking": "Event Tracking",
|
|
"assetsAdded": "Assets added",
|
|
"assetsRemoved": "Assets removed",
|
|
"albumRenamed": "Album renamed",
|
|
"albumDeleted": "Album deleted",
|
|
"sharingChanged": "Sharing changed",
|
|
"push": "Push",
|
|
"issueOpened": "Issue opened",
|
|
"issueClosed": "Issue closed",
|
|
"issueCommented": "Issue commented",
|
|
"prOpened": "PR opened",
|
|
"prClosed": "PR closed",
|
|
"prMerged": "PR merged",
|
|
"prCommented": "PR commented",
|
|
"releasePublished": "Release published",
|
|
"cardCreated": "Card created",
|
|
"cardUpdated": "Card updated",
|
|
"cardMoved": "Card moved",
|
|
"cardDeleted": "Card deleted",
|
|
"cardCommented": "Card commented",
|
|
"commentUpdated": "Comment updated",
|
|
"boardCreated": "Board created",
|
|
"boardUpdated": "Board updated",
|
|
"boardDeleted": "Board deleted",
|
|
"listCreated": "List created",
|
|
"listUpdated": "List updated",
|
|
"listDeleted": "List deleted",
|
|
"attachmentCreated": "Attachment added",
|
|
"cardLabelAdded": "Label added",
|
|
"taskCompleted": "Task completed",
|
|
"upsOnline": "UPS online (mains restored)",
|
|
"upsOnBattery": "UPS on battery",
|
|
"upsLowBattery": "Low battery",
|
|
"upsBatteryRestored": "Battery recovered",
|
|
"upsCommsLost": "Communication lost",
|
|
"upsCommsRestored": "Communication restored",
|
|
"upsReplaceBattery": "Replace battery",
|
|
"upsOverload": "UPS overloaded",
|
|
"scheduledMessage": "Scheduled message",
|
|
"webhookReceived": "Webhook received",
|
|
"trackImages": "Track images",
|
|
"trackVideos": "Track videos",
|
|
"favoritesOnly": "Favorites only",
|
|
"assetDisplay": "Asset Display",
|
|
"includePeople": "Include people",
|
|
"includeDetails": "Include asset details",
|
|
"maxAssets": "Max assets to show",
|
|
"sortBy": "Sort by",
|
|
"sortOrder": "Sort order",
|
|
"periodicSummary": "Periodic Summary",
|
|
"enabled": "Enabled",
|
|
"intervalDays": "Interval (days)",
|
|
"startDate": "Start date",
|
|
"times": "Times (HH:MM)",
|
|
"scheduledAssets": "Scheduled Assets",
|
|
"albumMode": "Album mode",
|
|
"limit": "Limit",
|
|
"assetType": "Asset type",
|
|
"minRating": "Min rating",
|
|
"memoryMode": "Memory Mode (On This Day)",
|
|
"memorySource": "Memory source",
|
|
"memorySourceAlbums": "Scan tracked albums",
|
|
"memorySourceNative": "Immich native memories",
|
|
"test": "Test",
|
|
"confirmDelete": "Delete this tracking config?",
|
|
"sortNone": "None",
|
|
"sortDate": "Date",
|
|
"sortRating": "Rating",
|
|
"sortName": "Name",
|
|
"orderDesc": "Descending",
|
|
"orderAsc": "Ascending",
|
|
"albumModePerAlbum": "Per album",
|
|
"albumModeCombined": "Combined",
|
|
"albumModeRandom": "Random",
|
|
"assetTypeAll": "All",
|
|
"assetTypePhoto": "Photo",
|
|
"assetTypeVideo": "Video",
|
|
"periodic": "periodic",
|
|
"scheduled": "scheduled",
|
|
"memory": "memory",
|
|
"added": "added",
|
|
"removed": "removed",
|
|
"renamed": "renamed",
|
|
"deleted": "deleted",
|
|
"providerType": "Provider Type",
|
|
"sortRandom": "Random"
|
|
},
|
|
"templateConfig": {
|
|
"title": "Template Configs",
|
|
"description": "Define how notification messages are formatted",
|
|
"providerType": "Service Provider Type",
|
|
"newConfig": "New Config",
|
|
"name": "Name",
|
|
"namePlaceholder": "Default EN",
|
|
"descriptionPlaceholder": "e.g. English templates for family notifications",
|
|
"noConfigs": "No template configs yet.",
|
|
"eventMessages": "Event Messages",
|
|
"assetsAdded": "Assets added",
|
|
"assetsRemoved": "Assets removed",
|
|
"albumRenamed": "Album renamed",
|
|
"albumDeleted": "Album deleted",
|
|
"sharingChanged": "Sharing changed",
|
|
"assetFormatting": "Asset Formatting",
|
|
"imageTemplate": "Image item",
|
|
"videoTemplate": "Video item",
|
|
"assetsWrapper": "Assets wrapper",
|
|
"moreMessage": "More message",
|
|
"peopleFormat": "People format",
|
|
"dateLocation": "Date & Location",
|
|
"dateFormat": "Date & time format",
|
|
"dateOnlyFormat": "Date only format",
|
|
"commonDate": "Common date",
|
|
"uniqueDate": "Per-asset date",
|
|
"locationFormat": "Location format",
|
|
"commonLocation": "Common location",
|
|
"uniqueLocation": "Per-asset location",
|
|
"favoriteIndicator": "Favorite indicator",
|
|
"scheduledMessages": "Scheduled Messages",
|
|
"periodicSummary": "Periodic summary",
|
|
"periodicAlbum": "Per-album item",
|
|
"scheduledAssets": "Scheduled assets",
|
|
"memoryMode": "Memory mode",
|
|
"settings": "Settings",
|
|
"previewAs": "Preview as",
|
|
"preview": "Preview",
|
|
"variables": "Variables",
|
|
"assetFields": "Asset fields (in {% for asset in added_assets %})",
|
|
"albumFields": "Album fields (in {% for album in albums %})",
|
|
"confirmDelete": "Delete this template config?",
|
|
"invalidFormat": "Invalid format string",
|
|
"filterSlots": "Filter slots...",
|
|
"slots": "slots"
|
|
},
|
|
"templateVars": {
|
|
"message_assets_added": {
|
|
"description": "Notification when new assets are added to an album"
|
|
},
|
|
"message_assets_removed": {
|
|
"description": "Notification when assets are removed from an album"
|
|
},
|
|
"message_album_renamed": {
|
|
"description": "Notification when an album is renamed"
|
|
},
|
|
"message_album_deleted": {
|
|
"description": "Notification when an album is deleted"
|
|
},
|
|
"periodic_summary_message": {
|
|
"description": "Periodic album summary (scheduler not yet implemented)"
|
|
},
|
|
"scheduled_assets_message": {
|
|
"description": "Scheduled asset delivery (scheduler not yet implemented)"
|
|
},
|
|
"memory_mode_message": {
|
|
"description": "\"On This Day\" memories (scheduler not yet implemented)"
|
|
},
|
|
"album_id": "Album ID (UUID)",
|
|
"album_name": "Album name",
|
|
"album_url": "Public share URL (empty if not shared)",
|
|
"added_count": "Number of assets added",
|
|
"removed_count": "Number of assets removed",
|
|
"change_type": "Type of change (assets_added, assets_removed, album_renamed, album_deleted)",
|
|
"people": "Detected people names (list, use {{ people | join(', ') }})",
|
|
"added_assets": "List of asset dicts (use {% for asset in added_assets %})",
|
|
"removed_assets": "List of removed asset IDs (strings)",
|
|
"shared": "Whether album is shared (boolean)",
|
|
"target_type": "Target type: 'telegram' or 'webhook'",
|
|
"has_videos": "Whether added assets contain videos (boolean)",
|
|
"has_photos": "Whether added assets contain photos (boolean)",
|
|
"old_name": "Previous album name (rename events)",
|
|
"new_name": "New album name (rename events)",
|
|
"old_shared": "Was album shared before rename (boolean)",
|
|
"new_shared": "Is album shared after rename (boolean)",
|
|
"albums": "List of album dicts (use {% for album in albums %})",
|
|
"assets": "List of asset dicts (use {% for asset in assets %})",
|
|
"date": "Current date string",
|
|
"asset_id": "Asset ID (UUID)",
|
|
"asset_filename": "Original filename",
|
|
"asset_type": "IMAGE or VIDEO",
|
|
"asset_created_at": "Creation date/time (ISO 8601)",
|
|
"asset_owner": "Owner display name",
|
|
"asset_owner_id": "Owner user ID",
|
|
"asset_description": "User or EXIF description",
|
|
"asset_people": "People detected in this asset (list)",
|
|
"asset_is_favorite": "Whether asset is favorited (boolean)",
|
|
"asset_rating": "Star rating (1-5 or null)",
|
|
"asset_latitude": "GPS latitude (float or null)",
|
|
"asset_longitude": "GPS longitude (float or null)",
|
|
"asset_city": "City name",
|
|
"asset_state": "State/region name",
|
|
"asset_country": "Country name",
|
|
"asset_url": "Public viewer URL (if shared)",
|
|
"asset_download_url": "Direct download URL (if shared)",
|
|
"asset_photo_url": "Preview image URL (images only, if shared)",
|
|
"asset_playback_url": "Video playback URL (videos only, if shared)",
|
|
"album_name_field": "Album name (in album list)",
|
|
"album_asset_count": "Total assets in album",
|
|
"album_url_field": "Album share URL",
|
|
"album_shared": "Whether album is shared"
|
|
},
|
|
"settings": {
|
|
"title": "Settings",
|
|
"description": "Global application settings",
|
|
"general": "General",
|
|
"externalUrl": "External URL",
|
|
"externalUrlHint": "Public URL of this Notify Bridge instance (e.g. https://notify.example.com)",
|
|
"telegram": "Telegram",
|
|
"webhookSecret": "Webhook Secret",
|
|
"webhookSecretHint": "Secret token to verify webhook requests from Telegram",
|
|
"cacheTtl": "Media Cache TTL (hours)",
|
|
"cacheTtlHint": "How long to cache uploaded Telegram file_ids before re-uploading",
|
|
"saved": "Settings saved"
|
|
},
|
|
"hints": {
|
|
"periodicSummary": "Sends a scheduled summary of all tracked albums at specified times. Great for daily/weekly digests.",
|
|
"scheduledAssets": "Sends random or selected photos from tracked albums on a schedule. Like a daily photo pick.",
|
|
"memoryMode": "\"On This Day\" — sends photos taken on this date in previous years. Nostalgic flashbacks.",
|
|
"memorySource": "Albums: scans tracked albums for date-matching assets. Native: uses Immich's built-in memories (covers entire library, optionally filtered by tracked albums).",
|
|
"favoritesOnly": "Only include assets marked as favorites.",
|
|
"maxAssets": "Maximum number of asset details to include in a single notification message.",
|
|
"periodicStartDate": "The reference date for calculating periodic intervals. Summaries are sent every N days from this date.",
|
|
"times": "Time(s) of day to send notifications, in HH:MM format. Use commas for multiple times: 09:00,18:00",
|
|
"albumMode": "Per album: separate notification per album. Combined: one notification with all albums. Random: pick one album randomly.",
|
|
"minRating": "Only include assets with at least this star rating (0 = no filter).",
|
|
"eventMessages": "Templates for real-time event notifications. Use {variables} for dynamic content.",
|
|
"assetFormatting": "How individual assets are formatted within notification messages.",
|
|
"dateLocation": "Date and location formatting in notifications. Uses strftime syntax for dates.",
|
|
"scheduledMessages": "Templates for periodic summaries, scheduled photo picks, and On This Day memories.",
|
|
"aiCaptions": "Use Claude AI to generate a natural-language caption for notifications instead of the template.",
|
|
"maxMedia": "Maximum number of photos/videos to attach per notification (0 = text only).",
|
|
"groupSize": "Telegram media groups can contain 2-10 items. Larger batches are split into chunks.",
|
|
"chunkDelay": "Delay in milliseconds between sending media chunks. Prevents Telegram rate limiting.",
|
|
"maxAssetSize": "Skip assets larger than this size in MB. Telegram limits files to 50 MB.",
|
|
"trackingConfig": "Controls which events trigger notifications and how assets are filtered.",
|
|
"templateConfig": "Controls the message format. Uses default templates if not set.",
|
|
"scanInterval": "How often to poll the provider for changes, in seconds. Lower = faster detection but more API calls.",
|
|
"batchDuration": "Time to accumulate changes before dispatching notifications. 0 = send immediately.",
|
|
"defaultTrackingConfig": "Applied to all linked targets unless overridden per target.",
|
|
"defaultTemplateConfig": "Applied to all linked targets unless overridden per target.",
|
|
"defaultCount": "How many results to return when the user doesn't specify a count (1-20).",
|
|
"responseMode": "Media: send actual photos. Text: send filenames/links only. Media mode uses more bandwidth.",
|
|
"botLocale": "Language for command descriptions in Telegram's menu and bot response messages.",
|
|
"rateLimits": "Cooldown in seconds between uses of each command category per chat. 0 = no limit."
|
|
},
|
|
"matrixBot": {
|
|
"title": "Matrix Bots",
|
|
"description": "Matrix homeserver connections for room notifications",
|
|
"addBot": "Add Matrix Bot",
|
|
"name": "Name",
|
|
"namePlaceholder": "Home Server Bot",
|
|
"homeserverUrl": "Homeserver URL",
|
|
"accessToken": "Access Token",
|
|
"tokenPlaceholder": "syt_...",
|
|
"tokenUnchanged": "(unchanged)",
|
|
"displayName": "Display Name",
|
|
"testConnection": "Test connection",
|
|
"noBots": "No Matrix bots yet.",
|
|
"confirmDelete": "Delete this Matrix bot?"
|
|
},
|
|
"emailBot": {
|
|
"title": "Email Bots",
|
|
"description": "SMTP email senders for notifications",
|
|
"addBot": "Add Email Bot",
|
|
"name": "Name",
|
|
"namePlaceholder": "Family Notifications",
|
|
"email": "From Email",
|
|
"smtpHost": "SMTP Host",
|
|
"smtpPort": "Port",
|
|
"smtpUsername": "Username",
|
|
"smtpUsernamePlaceholder": "Same as email or app password",
|
|
"smtpPassword": "Password",
|
|
"passwordUnchanged": "(unchanged)",
|
|
"useTls": "Use TLS/SSL",
|
|
"testConnection": "Send test email",
|
|
"noBots": "No email bots yet.",
|
|
"confirmDelete": "Delete this email bot?"
|
|
},
|
|
"cmdTemplateConfig": {
|
|
"title": "Command Templates",
|
|
"description": "Customize command response messages with Jinja2 templates",
|
|
"newConfig": "New Config",
|
|
"name": "Name",
|
|
"namePlaceholder": "Default Immich Commands",
|
|
"descriptionPlaceholder": "e.g. Custom response formats for family bot",
|
|
"noConfigs": "No command template configs yet.",
|
|
"confirmDelete": "Delete this command template config?",
|
|
"commandResponses": "Command Responses",
|
|
"commandResponsesHint": "Leave a slot empty to use the default hardcoded response."
|
|
},
|
|
"commandConfig": {
|
|
"title": "Command Configs",
|
|
"description": "Define command settings for Telegram bot interactions",
|
|
"newConfig": "New Config",
|
|
"name": "Name",
|
|
"namePlaceholder": "Default commands",
|
|
"providerType": "Provider Type",
|
|
"enabledCommands": "Enabled Commands",
|
|
"locale": "Locale",
|
|
"responseMode": "Response Mode",
|
|
"modeMedia": "Media (files)",
|
|
"modeText": "Text only",
|
|
"defaultCount": "Default Count",
|
|
"rateLimits": "Rate Limits",
|
|
"searchCooldown": "Search cooldown (s)",
|
|
"defaultCooldown": "Default cooldown (s)",
|
|
"noConfigs": "No command configs yet.",
|
|
"confirmDelete": "Delete this command config?",
|
|
"commands": "commands",
|
|
"responseTemplate": "Response Template",
|
|
"noTemplate": "Default (hardcoded)"
|
|
},
|
|
"commandTracker": {
|
|
"title": "Command Trackers",
|
|
"description": "Manage command trackers and their listeners",
|
|
"newTracker": "New Tracker",
|
|
"name": "Name",
|
|
"namePlaceholder": "Family commands",
|
|
"provider": "Provider",
|
|
"selectProvider": "Select provider...",
|
|
"commandConfig": "Command Config",
|
|
"selectCommandConfig": "Select command config...",
|
|
"listeners": "Listeners",
|
|
"addListener": "Add Listener",
|
|
"removeListener": "Remove",
|
|
"noTrackers": "No command trackers yet.",
|
|
"confirmDelete": "Delete this command tracker?",
|
|
"enabled": "Enabled",
|
|
"disabled": "Disabled",
|
|
"noListeners": "No listeners attached.",
|
|
"selectBot": "Select bot...",
|
|
"listenerType": "telegram_bot"
|
|
},
|
|
"snackbar": {
|
|
"showDetails": "Show details",
|
|
"hideDetails": "Hide details"
|
|
},
|
|
"snack": {
|
|
"providerSaved": "Provider saved",
|
|
"providerDeleted": "Provider deleted",
|
|
"trackerCreated": "Tracker created",
|
|
"trackerUpdated": "Tracker updated",
|
|
"trackerDeleted": "Tracker deleted",
|
|
"trackerPaused": "Tracker paused",
|
|
"trackerResumed": "Tracker resumed",
|
|
"targetSaved": "Target saved",
|
|
"targetDeleted": "Target deleted",
|
|
"targetTestSent": "Test notification sent",
|
|
"templateSaved": "Template config saved",
|
|
"templateDeleted": "Template config deleted",
|
|
"trackingConfigSaved": "Tracking config saved",
|
|
"trackingConfigDeleted": "Tracking config deleted",
|
|
"botRegistered": "Bot registered",
|
|
"botDeleted": "Bot deleted",
|
|
"userCreated": "User created",
|
|
"userDeleted": "User deleted",
|
|
"passwordChanged": "Password changed",
|
|
"copied": "Copied to clipboard",
|
|
"genericError": "Something went wrong",
|
|
"commandsSaved": "Commands config saved",
|
|
"commandsSynced": "Commands synced to Telegram",
|
|
"targetLinked": "Target linked",
|
|
"targetUnlinked": "Target unlinked",
|
|
"botUpdated": "Bot updated",
|
|
"commandConfigSaved": "Command config saved",
|
|
"commandConfigDeleted": "Command config deleted",
|
|
"commandTrackerCreated": "Command tracker created",
|
|
"commandTrackerUpdated": "Command tracker updated",
|
|
"commandTrackerDeleted": "Command tracker deleted",
|
|
"commandTrackerEnabled": "Command tracker enabled",
|
|
"commandTrackerDisabled": "Command tracker disabled",
|
|
"listenerAdded": "Listener added",
|
|
"listenerRemoved": "Listener removed",
|
|
"cmdTemplateSaved": "Command template saved",
|
|
"cmdTemplateDeleted": "Command template deleted",
|
|
"emailBotCreated": "Email bot created",
|
|
"emailBotUpdated": "Email bot updated",
|
|
"emailBotDeleted": "Email bot deleted",
|
|
"emailBotTestSent": "Test email sent successfully",
|
|
"matrixBotCreated": "Matrix bot created",
|
|
"matrixBotUpdated": "Matrix bot updated",
|
|
"matrixBotDeleted": "Matrix bot deleted",
|
|
"matrixBotTestOk": "Matrix connection verified"
|
|
},
|
|
"common": {
|
|
"loading": "Loading...",
|
|
"save": "Save",
|
|
"cancel": "Cancel",
|
|
"delete": "Delete",
|
|
"clone": "Clone",
|
|
"edit": "Edit",
|
|
"description": "Description",
|
|
"close": "Close",
|
|
"confirm": "Confirm",
|
|
"error": "Error",
|
|
"success": "Success",
|
|
"none": "None",
|
|
"noneDefault": "None (default)",
|
|
"loadError": "Failed to load data",
|
|
"headersInvalid": "Invalid JSON",
|
|
"language": "Language",
|
|
"theme": "Theme",
|
|
"apiDocs": "API Docs",
|
|
"light": "Light",
|
|
"dark": "Dark",
|
|
"system": "System",
|
|
"test": "Test",
|
|
"create": "Create",
|
|
"changePassword": "Change Password",
|
|
"currentPassword": "Current password",
|
|
"newPassword": "New password",
|
|
"passwordChanged": "Password changed successfully",
|
|
"expand": "Expand",
|
|
"collapse": "Collapse",
|
|
"syntaxError": "Syntax error",
|
|
"undefinedVar": "Unknown variable",
|
|
"line": "line",
|
|
"enable": "Enable",
|
|
"disable": "Disable",
|
|
"add": "Add",
|
|
"filterByName": "Filter by name...",
|
|
"allTypes": "All types",
|
|
"allProviders": "All providers",
|
|
"noFilterResults": "No items match the current filter.",
|
|
"redirecting": "Redirecting..."
|
|
},
|
|
"templateSlot": {
|
|
"message_assets_added": "New assets added to album",
|
|
"message_assets_removed": "Assets removed from album",
|
|
"message_collection_renamed": "Album renamed",
|
|
"message_collection_deleted": "Album deleted",
|
|
"message_sharing_changed": "Sharing status changed",
|
|
"periodic_summary_message": "Periodic album summary",
|
|
"scheduled_assets_message": "Scheduled asset delivery",
|
|
"memory_mode_message": "On This Day memories",
|
|
"message_push": "Code pushed to repository",
|
|
"message_issue_opened": "Issue opened",
|
|
"message_issue_closed": "Issue closed",
|
|
"message_issue_commented": "Comment on issue",
|
|
"message_pr_opened": "Pull request opened",
|
|
"message_pr_closed": "Pull request closed",
|
|
"message_pr_merged": "Pull request merged",
|
|
"message_pr_commented": "Comment on pull request",
|
|
"message_release_published": "Release published",
|
|
"message_scheduled_message": "Scheduled message",
|
|
"message_card_created": "Card created",
|
|
"message_card_updated": "Card updated",
|
|
"message_card_moved": "Card moved between lists",
|
|
"message_card_deleted": "Card deleted",
|
|
"message_card_commented": "Comment added to card",
|
|
"message_comment_updated": "Comment updated",
|
|
"message_board_created": "Board created",
|
|
"message_board_updated": "Board updated",
|
|
"message_board_deleted": "Board deleted",
|
|
"message_list_created": "List created",
|
|
"message_list_updated": "List updated",
|
|
"message_list_deleted": "List deleted",
|
|
"message_attachment_created": "Attachment added to card",
|
|
"message_card_label_added": "Label added to card",
|
|
"message_task_completed": "Task completed",
|
|
"message_ups_online": "UPS back on mains power",
|
|
"message_ups_on_battery": "UPS switched to battery",
|
|
"message_ups_low_battery": "Battery critically low",
|
|
"message_ups_battery_restored": "Battery charge recovered",
|
|
"message_ups_comms_lost": "Communication with UPS lost",
|
|
"message_ups_comms_restored": "Communication with UPS restored",
|
|
"message_ups_replace_battery": "Battery needs replacement",
|
|
"message_ups_overload": "UPS load exceeded capacity"
|
|
},
|
|
"gridDesc": {
|
|
"sortNone": "No sorting applied",
|
|
"sortDate": "Sort by creation date",
|
|
"sortRating": "Sort by star rating",
|
|
"sortName": "Sort by file name",
|
|
"sortRandom": "Randomize order",
|
|
"orderDesc": "Newest or highest first",
|
|
"orderAsc": "Oldest or lowest first",
|
|
"albumModePerAlbum": "One message per album",
|
|
"albumModeCombined": "All albums in one message",
|
|
"albumModeRandom": "Pick a random album",
|
|
"assetTypeAll": "Photos and videos",
|
|
"assetTypePhoto": "Photos only",
|
|
"assetTypeVideo": "Videos only",
|
|
"memorySourceAlbums": "Scan tracked albums for On This Day matches",
|
|
"memorySourceNative": "Use Immich native memories API",
|
|
"localeEn": "English interface",
|
|
"localeRu": "Russian interface",
|
|
"modeMedia": "Send actual photo/video files",
|
|
"modeText": "Send file names and links only",
|
|
"allEvents": "Show all event types",
|
|
"assetsAdded": "New files added to album",
|
|
"assetsRemoved": "Files removed from album",
|
|
"renamed": "Album was renamed",
|
|
"deleted": "Album was deleted",
|
|
"sharingChanged": "Album sharing toggled",
|
|
"newestFirst": "Most recent events on top",
|
|
"oldestFirst": "Oldest events on top",
|
|
"chatActionNone": "No indicator shown",
|
|
"chatActionTyping": "Show typing... bubble",
|
|
"chatActionUploadPhoto": "Show uploading photo...",
|
|
"chatActionUploadVideo": "Show uploading video...",
|
|
"chatActionUploadDoc": "Show uploading document...",
|
|
"chatActionRecordVideo": "Show recording video...",
|
|
"chatActionRecordVoice": "Show recording voice...",
|
|
"previewTelegram": "Preview with Telegram HTML format",
|
|
"previewWebhook": "Preview as plain text",
|
|
"previewEmail": "Preview with email HTML format",
|
|
"previewDiscord": "Preview with Discord markdown",
|
|
"previewSlack": "Preview with Slack markdown",
|
|
"providerImmich": "Self-hosted photo server",
|
|
"providerGitea": "Self-hosted Git service",
|
|
"providerPlanka": "Self-hosted Kanban board",
|
|
"providerScheduler": "Time-based scheduled messages",
|
|
"providerNut": "Network UPS monitoring",
|
|
"providerGooglePhotos": "Google Photos albums & shared libraries"
|
|
},
|
|
"error": {
|
|
"notFound": "Page not found",
|
|
"goHome": "Go home"
|
|
},
|
|
"searchPalette": {
|
|
"placeholder": "Search entities...",
|
|
"noResults": "No results found",
|
|
"typeToSearch": "Start typing to search",
|
|
"navigate": "navigate",
|
|
"open": "open",
|
|
"close": "close"
|
|
},
|
|
"actions": {
|
|
"title": "Actions",
|
|
"description": "Scheduled mutations on external services",
|
|
"addAction": "Add Action",
|
|
"noActions": "No actions configured yet.",
|
|
"provider": "Provider",
|
|
"selectProvider": "Select provider...",
|
|
"actionType": "Action Type",
|
|
"name": "Name",
|
|
"schedule": "Schedule",
|
|
"interval": "Interval",
|
|
"seconds": "seconds",
|
|
"cronHint": "Standard cron expression (e.g. 0 3 * * * for daily at 3 AM)",
|
|
"enabled": "Enabled",
|
|
"rules": "rules",
|
|
"addRule": "Add Rule",
|
|
"ruleName": "Rule Name",
|
|
"ruleNamePlaceholder": "e.g. Alice → Family Album",
|
|
"unnamedRule": "Unnamed rule",
|
|
"noRules": "No rules yet. Add a rule to define what this action does.",
|
|
"on": "ON",
|
|
"off": "OFF",
|
|
"criteria": "Criteria",
|
|
"persons": "Persons",
|
|
"addPerson": "Add person...",
|
|
"searchQuery": "Smart Search Query",
|
|
"searchQueryPlaceholder": "e.g. sunset, beach, birthday...",
|
|
"assetType": "Asset type",
|
|
"dateFrom": "From date",
|
|
"dateTo": "To date",
|
|
"favoritesOnly": "Favorites only",
|
|
"targetAlbum": "Target Album",
|
|
"selectAlbum": "Album",
|
|
"selectAlbumPlaceholder": "Select album",
|
|
"albumId": "Album ID",
|
|
"createAlbumIfMissing": "Create album if it doesn't exist",
|
|
"newAlbumName": "New album name",
|
|
"execute": "Execute",
|
|
"dryRun": "Dry Run",
|
|
"history": "History",
|
|
"affected": "affected",
|
|
"executeResult": "Action executed: {affected} items affected",
|
|
"dryRunResult": "Dry run: {affected} items would be affected",
|
|
"saved": "Action saved",
|
|
"deleted": "Action deleted",
|
|
"ruleSaved": "Rule saved",
|
|
"ruleDeleted": "Rule deleted",
|
|
"confirmDelete": "Are you sure you want to delete this action? All rules and execution history will be lost.",
|
|
"loadError": "Failed to load actions",
|
|
"noExecutions": "No executions yet.",
|
|
"triggerManual": "manual",
|
|
"triggerDryRun": "dry-run",
|
|
"triggerScheduled": "scheduled"
|
|
}
|
|
} |