Files
notify-bridge/frontend/src/lib/i18n/en.json
T
alexei.dolgolyov 616b221c92 feat: generic webhook provider with JSONPath payload extraction
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.
2026-03-27 23:51:14 +03:00

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"
}
}