feat: locale-aware notification templates + UX improvements
- Add locale support to notification templates (matching command template
pattern): TemplateSlot now has locale field with (config_id, slot_name,
locale) uniqueness, nested API format {slot: {locale: template}}
- Migration merges separate EN/RU system configs into unified per-provider
configs; seeds create one config per provider with multi-locale slots
- Locale-aware dispatch with EN fallback in NotificationDispatcher
- Frontend locale tabs (EN/RU) on template config editor
- Fix tracking config cards not showing default provider icons
- Global provider filter, search palette, and various UX polish
This commit is contained in:
@@ -27,7 +27,8 @@ class TargetConfig:
|
||||
|
||||
type: str # "telegram", "webhook", "email", "discord", "slack", "ntfy", "matrix"
|
||||
config: dict[str, Any] # target-level config (bot_token, settings, etc.)
|
||||
template_slots: dict[str, str] | None = None # event_type -> template string
|
||||
template_slots: dict[str, dict[str, str]] | None = None # event_type -> {locale -> template}
|
||||
locale: str = "en" # preferred locale for template resolution
|
||||
date_format: str = "%d.%m.%Y, %H:%M UTC"
|
||||
date_only_format: str = "%d.%m.%Y"
|
||||
provider_api_key: str | None = None # API key for downloading assets from provider
|
||||
@@ -72,12 +73,12 @@ class NotificationDispatcher:
|
||||
self, event: ServiceEvent, target: TargetConfig
|
||||
) -> dict[str, Any]:
|
||||
"""Send event to a single target (potentially multiple receivers)."""
|
||||
# Select template
|
||||
# Select template with locale fallback
|
||||
template_str = DEFAULT_TEMPLATE
|
||||
if target.template_slots:
|
||||
slot = target.template_slots.get(event.event_type.value)
|
||||
if slot:
|
||||
template_str = slot
|
||||
locale_map = target.template_slots.get(event.event_type.value)
|
||||
if locale_map:
|
||||
template_str = locale_map.get(target.locale) or locale_map.get("en") or template_str
|
||||
|
||||
# Build context and render ONCE
|
||||
ctx = build_template_context(
|
||||
|
||||
Reference in New Issue
Block a user