From 67b21d5fe3b9e4eca73c92c8624e65ace151bfa8 Mon Sep 17 00:00:00 2001 From: Maurice Date: Sun, 5 Apr 2026 14:46:36 +0200 Subject: [PATCH] i18n(admin): rename tabs and merge notification panels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Configuration → Personalization (all 13 languages) - Merge Notification Channels + Admin Notifications into single Notifications tab - Audit Log → Audit (all 13 languages) --- client/src/i18n/translations/ar.ts | 6 ++---- client/src/i18n/translations/br.ts | 6 ++---- client/src/i18n/translations/cs.ts | 6 ++---- client/src/i18n/translations/de.ts | 6 ++---- client/src/i18n/translations/en.ts | 6 ++---- client/src/i18n/translations/es.ts | 6 ++---- client/src/i18n/translations/fr.ts | 6 ++---- client/src/i18n/translations/hu.ts | 6 ++---- client/src/i18n/translations/it.ts | 6 ++---- client/src/i18n/translations/nl.ts | 6 ++---- client/src/i18n/translations/pl.ts | 6 ++---- client/src/i18n/translations/ru.ts | 6 ++---- client/src/i18n/translations/zh.ts | 6 ++---- client/src/pages/AdminPage.tsx | 16 ++++++++-------- 14 files changed, 34 insertions(+), 60 deletions(-) diff --git a/client/src/i18n/translations/ar.ts b/client/src/i18n/translations/ar.ts index 31eee43..4f1a81b 100644 --- a/client/src/i18n/translations/ar.ts +++ b/client/src/i18n/translations/ar.ts @@ -394,9 +394,9 @@ const ar: Record = { 'admin.tabs.users': 'المستخدمون', 'admin.tabs.categories': 'الفئات', 'admin.tabs.backup': 'النسخ الاحتياطي', - 'admin.tabs.audit': 'سجل التدقيق', + 'admin.tabs.audit': 'تدقيق', 'admin.tabs.settings': 'الإعدادات', - 'admin.tabs.config': 'الإعدادات', + 'admin.tabs.config': 'التخصيص', 'admin.tabs.templates': 'قوالب التعبئة', 'admin.tabs.addons': 'الإضافات', 'admin.tabs.mcpTokens': 'رموز MCP', @@ -1641,8 +1641,6 @@ const ar: Record = { 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'يُرسل Webhook المسؤول تلقائيًا عند تعيين رابط URL', 'admin.notifications.adminNotificationsHint': 'حدد القنوات التي تُسلّم إشعارات المسؤول (مثل تنبيهات الإصدارات). يُرسل الـ Webhook تلقائيًا عند تعيين رابط URL لـ Webhook المسؤول.', 'admin.tabs.notifications': 'الإشعارات', - 'admin.tabs.notificationChannels': 'قنوات الإشعارات', - 'admin.tabs.adminNotifications': 'إشعارات المسؤول', 'notifications.versionAvailable.title': 'تحديث متاح', 'notifications.versionAvailable.text': 'TREK {version} متاح الآن.', 'notifications.versionAvailable.button': 'عرض التفاصيل', diff --git a/client/src/i18n/translations/br.ts b/client/src/i18n/translations/br.ts index 6964576..425215a 100644 --- a/client/src/i18n/translations/br.ts +++ b/client/src/i18n/translations/br.ts @@ -470,7 +470,7 @@ const br: Record = { // Packing Templates & Bag Tracking 'admin.bagTracking.title': 'Rastreamento de malas', 'admin.bagTracking.subtitle': 'Ativar peso e atribuição de mala para itens da lista', - 'admin.tabs.config': 'Configuração', + 'admin.tabs.config': 'Personalização', 'admin.tabs.templates': 'Modelos de mala', 'admin.packingTemplates.title': 'Modelos de mala', 'admin.packingTemplates.subtitle': 'Crie listas de mala reutilizáveis para suas viagens', @@ -535,7 +535,7 @@ const br: Record = { 'admin.weather.requestsDesc': 'Grátis, sem chave de API', 'admin.weather.locationHint': 'O clima usa o primeiro lugar com coordenadas de cada dia. Se nenhum lugar estiver atribuído ao dia, qualquer lugar da lista serve como referência.', - 'admin.tabs.audit': 'Log de auditoria', + 'admin.tabs.audit': 'Audit', 'admin.audit.subtitle': 'Eventos sensíveis de segurança e administração (backups, usuários, 2FA, configurações).', 'admin.audit.empty': 'Nenhum registro de auditoria.', @@ -1636,8 +1636,6 @@ const br: Record = { 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'O webhook de admin dispara automaticamente quando uma URL está configurada', 'admin.notifications.adminNotificationsHint': 'Configure quais canais entregam notificações de admin (ex. alertas de versão). O webhook dispara automaticamente se uma URL de webhook de admin estiver definida.', 'admin.tabs.notifications': 'Notificações', - 'admin.tabs.notificationChannels': 'Canais de notificação', - 'admin.tabs.adminNotifications': 'Notificações de admin', 'notifications.versionAvailable.title': 'Atualização disponível', 'notifications.versionAvailable.text': 'TREK {version} já está disponível.', 'notifications.versionAvailable.button': 'Ver detalhes', diff --git a/client/src/i18n/translations/cs.ts b/client/src/i18n/translations/cs.ts index 88a8095..3e06555 100644 --- a/client/src/i18n/translations/cs.ts +++ b/client/src/i18n/translations/cs.ts @@ -470,7 +470,7 @@ const cs: Record = { // Šablony balení (Packing Templates) 'admin.bagTracking.title': 'Sledování zavazadel', 'admin.bagTracking.subtitle': 'Povolit váhu a přiřazení k zavazadlům u položek balení', - 'admin.tabs.config': 'Konfigurace', + 'admin.tabs.config': 'Personalizace', 'admin.tabs.templates': 'Šablony seznamů', 'admin.packingTemplates.title': 'Šablony pro balení', 'admin.packingTemplates.subtitle': 'Vytvářejte opakovaně použitelné seznamy pro své cesty', @@ -524,7 +524,7 @@ const cs: Record = { 'admin.addons.subtitleBefore': 'Zapněte nebo vypněte funkce a přizpůsobte si ', 'admin.addons.subtitleAfter': '.', - 'admin.tabs.audit': 'Auditní protokol', + 'admin.tabs.audit': 'Audit', 'admin.audit.subtitle': 'Bezpečnostní a administrátorské události (zálohy, uživatelé, 2FA, nastavení).', 'admin.audit.empty': 'Zatím žádné záznamy auditu.', @@ -1641,8 +1641,6 @@ const cs: Record = { 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'Admin webhook odesílá automaticky, pokud je nastavena URL', 'admin.notifications.adminNotificationsHint': 'Nastavte, které kanály doručují admin oznámení (např. upozornění na verze). Webhook odesílá automaticky, pokud je nastavena URL admin webhooku.', 'admin.tabs.notifications': 'Oznámení', - 'admin.tabs.notificationChannels': 'Kanály oznámení', - 'admin.tabs.adminNotifications': 'Admin oznámení', 'notifications.versionAvailable.title': 'Dostupná aktualizace', 'notifications.versionAvailable.text': 'TREK {version} je nyní k dispozici.', 'notifications.versionAvailable.button': 'Zobrazit podrobnosti', diff --git a/client/src/i18n/translations/de.ts b/client/src/i18n/translations/de.ts index 3554d2e..a7af9ed 100644 --- a/client/src/i18n/translations/de.ts +++ b/client/src/i18n/translations/de.ts @@ -389,7 +389,7 @@ const de: Record = { 'admin.tabs.users': 'Benutzer', 'admin.tabs.categories': 'Kategorien', 'admin.tabs.backup': 'Backup', - 'admin.tabs.audit': 'Audit-Protokoll', + 'admin.tabs.audit': 'Audit', 'admin.stats.users': 'Benutzer', 'admin.stats.trips': 'Reisen', 'admin.stats.places': 'Orte', @@ -471,7 +471,7 @@ const de: Record = { // Packing Templates & Bag Tracking 'admin.bagTracking.title': 'Gepäck-Tracking', 'admin.bagTracking.subtitle': 'Gewicht und Gepäckstück-Zuordnung für Packlisteneinträge aktivieren', - 'admin.tabs.config': 'Konfiguration', + 'admin.tabs.config': 'Personalisierung', 'admin.tabs.templates': 'Packvorlagen', 'admin.packingTemplates.title': 'Packvorlagen', 'admin.packingTemplates.subtitle': 'Wiederverwendbare Packlisten für deine Reisen erstellen', @@ -1638,8 +1638,6 @@ const de: Record = { 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'Admin-Webhook sendet automatisch, wenn eine URL konfiguriert ist', 'admin.notifications.adminNotificationsHint': 'Konfiguriere, welche Kanäle Admin-Benachrichtigungen liefern (z. B. Versions-Updates). Der Webhook sendet automatisch, wenn eine Admin-Webhook-URL gesetzt ist.', 'admin.tabs.notifications': 'Benachrichtigungen', - 'admin.tabs.notificationChannels': 'Benachrichtigungskanäle', - 'admin.tabs.adminNotifications': 'Admin-Benachrichtigungen', 'notifications.versionAvailable.title': 'Update verfügbar', 'notifications.versionAvailable.text': 'TREK {version} ist jetzt verfügbar.', 'notifications.versionAvailable.button': 'Details anzeigen', diff --git a/client/src/i18n/translations/en.ts b/client/src/i18n/translations/en.ts index 28ebcde..36c35ae 100644 --- a/client/src/i18n/translations/en.ts +++ b/client/src/i18n/translations/en.ts @@ -411,9 +411,7 @@ const en: Record = { 'admin.tabs.categories': 'Categories', 'admin.tabs.backup': 'Backup', 'admin.tabs.notifications': 'Notifications', - 'admin.tabs.notificationChannels': 'Notification Channels', - 'admin.tabs.adminNotifications': 'Admin Notifications', - 'admin.tabs.audit': 'Audit log', + 'admin.tabs.audit': 'Audit', 'admin.stats.users': 'Users', 'admin.stats.trips': 'Trips', 'admin.stats.places': 'Places', @@ -495,7 +493,7 @@ const en: Record = { // Packing Templates & Bag Tracking 'admin.bagTracking.title': 'Bag Tracking', 'admin.bagTracking.subtitle': 'Enable weight and bag assignment for packing items', - 'admin.tabs.config': 'Configuration', + 'admin.tabs.config': 'Personalization', 'admin.tabs.templates': 'Packing Templates', 'admin.packingTemplates.title': 'Packing Templates', 'admin.packingTemplates.subtitle': 'Create reusable packing lists for your trips', diff --git a/client/src/i18n/translations/es.ts b/client/src/i18n/translations/es.ts index 2892886..ee9eb42 100644 --- a/client/src/i18n/translations/es.ts +++ b/client/src/i18n/translations/es.ts @@ -387,7 +387,7 @@ const es: Record = { 'admin.tabs.users': 'Usuarios', 'admin.tabs.categories': 'Categorías', 'admin.tabs.backup': 'Copia de seguridad', - 'admin.tabs.audit': 'Registro de auditoría', + 'admin.tabs.audit': 'Audit', 'admin.stats.users': 'Usuarios', 'admin.stats.trips': 'Viajes', 'admin.stats.places': 'Lugares', @@ -466,7 +466,7 @@ const es: Record = { 'admin.bagTracking.title': 'Seguimiento de equipaje', 'admin.bagTracking.subtitle': 'Activar peso y asignación de equipaje para artículos de la lista', - 'admin.tabs.config': 'Configuración', + 'admin.tabs.config': 'Personalización', 'admin.tabs.templates': 'Plantillas de equipaje', 'admin.packingTemplates.title': 'Plantillas de equipaje', 'admin.packingTemplates.subtitle': 'Crear listas de equipaje reutilizables para tus viajes', @@ -1643,8 +1643,6 @@ const es: Record = { 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'El webhook de admin se activa automáticamente si hay una URL configurada', 'admin.notifications.adminNotificationsHint': 'Configura qué canales entregan notificaciones de admin (ej. alertas de versión). El webhook se activa automáticamente si hay una URL de webhook de admin configurada.', 'admin.tabs.notifications': 'Notificaciones', - 'admin.tabs.notificationChannels': 'Canales de notificación', - 'admin.tabs.adminNotifications': 'Notificaciones de admin', 'notifications.versionAvailable.title': 'Actualización disponible', 'notifications.versionAvailable.text': 'TREK {version} ya está disponible.', 'notifications.versionAvailable.button': 'Ver detalles', diff --git a/client/src/i18n/translations/fr.ts b/client/src/i18n/translations/fr.ts index 6f1100c..88390b9 100644 --- a/client/src/i18n/translations/fr.ts +++ b/client/src/i18n/translations/fr.ts @@ -469,7 +469,7 @@ const fr: Record = { 'admin.bagTracking.title': 'Suivi des bagages', 'admin.bagTracking.subtitle': 'Activer le poids et l\'attribution de bagages pour les articles', - 'admin.tabs.config': 'Configuration', + 'admin.tabs.config': 'Personnalisation', 'admin.tabs.templates': 'Modèles de bagages', 'admin.packingTemplates.title': 'Modèles de bagages', 'admin.packingTemplates.subtitle': 'Créer des listes de bagages réutilisables pour vos voyages', @@ -534,7 +534,7 @@ const fr: Record = { 'admin.weather.requestsDesc': 'Gratuit, aucune clé API requise', 'admin.weather.locationHint': 'La météo est basée sur le premier lieu avec des coordonnées de chaque jour. Si aucun lieu n\'est attribué à un jour, un lieu de la liste est utilisé comme référence.', - 'admin.tabs.audit': 'Journal d\'audit', + 'admin.tabs.audit': 'Audit', 'admin.audit.subtitle': 'Événements sensibles de sécurité et d\'administration (sauvegardes, utilisateurs, 2FA, paramètres).', 'admin.audit.empty': 'Aucune entrée d\'audit.', @@ -1637,8 +1637,6 @@ const fr: Record = { 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'Le webhook admin s\'active automatiquement si une URL est configurée', 'admin.notifications.adminNotificationsHint': 'Configurez quels canaux envoient les notifications admin (ex. alertes de version). Le webhook s\'active automatiquement si une URL webhook admin est définie.', 'admin.tabs.notifications': 'Notifications', - 'admin.tabs.notificationChannels': 'Canaux de notification', - 'admin.tabs.adminNotifications': 'Notifications admin', 'notifications.versionAvailable.title': 'Mise à jour disponible', 'notifications.versionAvailable.text': 'TREK {version} est maintenant disponible.', 'notifications.versionAvailable.button': 'Voir les détails', diff --git a/client/src/i18n/translations/hu.ts b/client/src/i18n/translations/hu.ts index 1b91497..78e1aea 100644 --- a/client/src/i18n/translations/hu.ts +++ b/client/src/i18n/translations/hu.ts @@ -470,7 +470,7 @@ const hu: Record = { // Csomagolási sablonok és poggyászkövetés 'admin.bagTracking.title': 'Poggyászkövetés', 'admin.bagTracking.subtitle': 'Súly- és táskahozzárendelés engedélyezése csomagolási tételeknél', - 'admin.tabs.config': 'Konfiguráció', + 'admin.tabs.config': 'Személyre szabás', 'admin.tabs.templates': 'Csomagolási sablonok', 'admin.packingTemplates.title': 'Csomagolási sablonok', 'admin.packingTemplates.subtitle': 'Újrafelhasználható csomagolási listák létrehozása utazásaidhoz', @@ -535,7 +535,7 @@ const hu: Record = { 'admin.weather.requestsDesc': 'Ingyenes, nincs szükség API kulcsra', 'admin.weather.locationHint': 'Az időjárás az adott nap első koordinátákkal rendelkező helye alapján készül. Ha nincs hely hozzárendelve a naphoz, a helylista bármelyik helye szolgál referenciául.', - 'admin.tabs.audit': 'Auditnapló', + 'admin.tabs.audit': 'Audit', 'admin.audit.subtitle': 'Biztonsági és adminisztrációs események (mentések, felhasználók, 2FA, beállítások).', 'admin.audit.empty': 'Még nincsenek audit bejegyzések.', @@ -1638,8 +1638,6 @@ const hu: Record = { 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'Az admin webhook automatikusan küld, ha URL van beállítva', 'admin.notifications.adminNotificationsHint': 'Állítsa be, hogy mely csatornák szállítsák az admin értesítéseket (pl. verziófrissítési figyelmeztetések). A webhook automatikusan küld, ha admin webhook URL van megadva.', 'admin.tabs.notifications': 'Értesítések', - 'admin.tabs.notificationChannels': 'Értesítési csatornák', - 'admin.tabs.adminNotifications': 'Admin értesítések', 'notifications.versionAvailable.title': 'Elérhető frissítés', 'notifications.versionAvailable.text': 'A TREK {version} már elérhető.', 'notifications.versionAvailable.button': 'Részletek megtekintése', diff --git a/client/src/i18n/translations/it.ts b/client/src/i18n/translations/it.ts index d7113b6..79b7c4d 100644 --- a/client/src/i18n/translations/it.ts +++ b/client/src/i18n/translations/it.ts @@ -469,7 +469,7 @@ const it: Record = { // Packing Templates & Bag Tracking 'admin.bagTracking.title': 'Tracciamento valigia', 'admin.bagTracking.subtitle': 'Abilita il peso e l\'assegnazione della valigia per gli elementi della lista valigia', - 'admin.tabs.config': 'Configurazione', + 'admin.tabs.config': 'Personalizzazione', 'admin.tabs.templates': 'Modelli lista valigia', 'admin.packingTemplates.title': 'Modelli lista valigia', 'admin.packingTemplates.subtitle': 'Crea liste valigia riutilizzabili per i tuoi viaggi', @@ -535,7 +535,7 @@ const it: Record = { 'admin.weather.requestsDesc': 'Gratis, nessuna chiave API richiesta', 'admin.weather.locationHint': 'Il meteo si basa sul primo luogo con coordinate di ogni giorno. Se a un giorno non è assegnato alcun luogo, viene utilizzato come riferimento un qualsiasi luogo dell\'elenco.', - 'admin.tabs.audit': 'Log di audit', + 'admin.tabs.audit': 'Audit', 'admin.audit.subtitle': 'Eventi sensibili di sicurezza e amministrazione (backup, utenti, 2FA, impostazioni).', 'admin.audit.empty': 'Nessuna voce di audit.', @@ -1638,8 +1638,6 @@ const it: Record = { 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'Il webhook admin si attiva automaticamente quando è configurato un URL', 'admin.notifications.adminNotificationsHint': 'Configura quali canali consegnano le notifiche admin (es. avvisi di versione). Il webhook si attiva automaticamente se è impostato un URL webhook admin.', 'admin.tabs.notifications': 'Notifications', - 'admin.tabs.notificationChannels': 'Canali di notifica', - 'admin.tabs.adminNotifications': 'Notifiche admin', 'notifications.versionAvailable.title': 'Aggiornamento disponibile', 'notifications.versionAvailable.text': 'TREK {version} è ora disponibile.', 'notifications.versionAvailable.button': 'Visualizza dettagli', diff --git a/client/src/i18n/translations/nl.ts b/client/src/i18n/translations/nl.ts index 0b3f85d..c8d70de 100644 --- a/client/src/i18n/translations/nl.ts +++ b/client/src/i18n/translations/nl.ts @@ -389,7 +389,7 @@ const nl: Record = { 'admin.tabs.users': 'Gebruikers', 'admin.tabs.categories': 'Categorieën', 'admin.tabs.backup': 'Back-up', - 'admin.tabs.audit': 'Auditlog', + 'admin.tabs.audit': 'Audit', 'admin.stats.users': 'Gebruikers', 'admin.stats.trips': 'Reizen', 'admin.stats.places': 'Plaatsen', @@ -470,7 +470,7 @@ const nl: Record = { 'admin.bagTracking.title': 'Bagagetracking', 'admin.bagTracking.subtitle': 'Gewicht en bagagetoewijzing inschakelen voor paklijstitems', - 'admin.tabs.config': 'Configuratie', + 'admin.tabs.config': 'Personalisatie', 'admin.tabs.templates': 'Paksjablonen', 'admin.packingTemplates.title': 'Paksjablonen', 'admin.packingTemplates.subtitle': 'Herbruikbare paklijsten maken voor je reizen', @@ -1637,8 +1637,6 @@ const nl: Record = { 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'Admin-webhook verstuurt automatisch als er een URL is ingesteld', 'admin.notifications.adminNotificationsHint': 'Stel in via welke kanalen admin-meldingen worden bezorgd (bijv. versie-updates). De webhook verstuurt automatisch als er een admin-webhook-URL is ingesteld.', 'admin.tabs.notifications': 'Meldingen', - 'admin.tabs.notificationChannels': 'Meldingskanalen', - 'admin.tabs.adminNotifications': 'Admin-meldingen', 'notifications.versionAvailable.title': 'Update beschikbaar', 'notifications.versionAvailable.text': 'TREK {version} is nu beschikbaar.', 'notifications.versionAvailable.button': 'Details bekijken', diff --git a/client/src/i18n/translations/pl.ts b/client/src/i18n/translations/pl.ts index e5fe34b..d5e7e0e 100644 --- a/client/src/i18n/translations/pl.ts +++ b/client/src/i18n/translations/pl.ts @@ -357,9 +357,7 @@ const pl: Record = { 'admin.tabs.categories': 'Kategorie', 'admin.tabs.backup': 'Backupy', 'admin.tabs.notifications': 'Powiadomienia', - 'admin.tabs.notificationChannels': 'Kanały powiadomień', - 'admin.tabs.adminNotifications': 'Powiadomienia admina', - 'admin.tabs.audit': 'Aktywność', + 'admin.tabs.audit': 'Audit', 'admin.stats.users': 'Użytkownicy', 'admin.stats.trips': 'Podróże', 'admin.stats.places': 'Miejsca', @@ -441,7 +439,7 @@ const pl: Record = { // Packing Templates & Bag Tracking 'admin.bagTracking.title': 'Kontrola bagażu', 'admin.bagTracking.subtitle': 'Włącz wagę i przypisywanie do toreb dla przedmiotów do pakowania', - 'admin.tabs.config': 'Konfiguracja', + 'admin.tabs.config': 'Personalizacja', 'admin.tabs.templates': 'Szablony pakowania', 'admin.packingTemplates.title': 'Szablony pakowania', 'admin.packingTemplates.subtitle': 'Twórz szablony list pakowania do wielokrotnego użycia dla swoich podróży', diff --git a/client/src/i18n/translations/ru.ts b/client/src/i18n/translations/ru.ts index 5d0ae45..4fec02e 100644 --- a/client/src/i18n/translations/ru.ts +++ b/client/src/i18n/translations/ru.ts @@ -389,7 +389,7 @@ const ru: Record = { 'admin.tabs.users': 'Пользователи', 'admin.tabs.categories': 'Категории', 'admin.tabs.backup': 'Резервная копия', - 'admin.tabs.audit': 'Журнал аудита', + 'admin.tabs.audit': 'Аудит', 'admin.stats.users': 'Пользователи', 'admin.stats.trips': 'Поездки', 'admin.stats.places': 'Места', @@ -470,7 +470,7 @@ const ru: Record = { 'admin.bagTracking.title': 'Отслеживание багажа', 'admin.bagTracking.subtitle': 'Включить вес и привязку к багажу для вещей', - 'admin.tabs.config': 'Конфигурация', + 'admin.tabs.config': 'Персонализация', 'admin.tabs.templates': 'Шаблоны упаковки', 'admin.packingTemplates.title': 'Шаблоны упаковки', 'admin.packingTemplates.subtitle': 'Создавайте многоразовые списки вещей для поездок', @@ -1637,8 +1637,6 @@ const ru: Record = { 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'Вебхук администратора отправляется автоматически при наличии URL', 'admin.notifications.adminNotificationsHint': 'Настройте, какие каналы доставляют уведомления администратора (например, оповещения о версиях). Вебхук отправляется автоматически, если задан URL вебхука администратора.', 'admin.tabs.notifications': 'Уведомления', - 'admin.tabs.notificationChannels': 'Каналы уведомлений', - 'admin.tabs.adminNotifications': 'Уведомления администратора', 'notifications.versionAvailable.title': 'Доступно обновление', 'notifications.versionAvailable.text': 'TREK {version} теперь доступен.', 'notifications.versionAvailable.button': 'Подробнее', diff --git a/client/src/i18n/translations/zh.ts b/client/src/i18n/translations/zh.ts index 3d256e3..9d27c3a 100644 --- a/client/src/i18n/translations/zh.ts +++ b/client/src/i18n/translations/zh.ts @@ -389,7 +389,7 @@ const zh: Record = { 'admin.tabs.users': '用户', 'admin.tabs.categories': '分类', 'admin.tabs.backup': '备份', - 'admin.tabs.audit': '审计日志', + 'admin.tabs.audit': '审计', 'admin.stats.users': '用户', 'admin.stats.trips': '旅行', 'admin.stats.places': '地点', @@ -470,7 +470,7 @@ const zh: Record = { 'admin.bagTracking.title': '行李追踪', 'admin.bagTracking.subtitle': '为打包物品启用重量和行李分配', - 'admin.tabs.config': '配置', + 'admin.tabs.config': '个性化', 'admin.tabs.templates': '打包模板', 'admin.packingTemplates.title': '打包模板', 'admin.packingTemplates.subtitle': '创建可复用的旅行打包清单', @@ -1637,8 +1637,6 @@ const zh: Record = { 'admin.notifications.adminWebhookPanel.alwaysOnHint': '配置 URL 后管理员 Webhook 自动触发', 'admin.notifications.adminNotificationsHint': '配置哪些渠道发送管理员通知(如版本更新提醒)。设置管理员 Webhook URL 后,Webhook 将自动触发。', 'admin.tabs.notifications': '通知', - 'admin.tabs.notificationChannels': '通知渠道', - 'admin.tabs.adminNotifications': '管理员通知', 'notifications.versionAvailable.title': '有可用更新', 'notifications.versionAvailable.text': 'TREK {version} 现已可用。', 'notifications.versionAvailable.button': '查看详情', diff --git a/client/src/pages/AdminPage.tsx b/client/src/pages/AdminPage.tsx index 201e344..92f3b98 100644 --- a/client/src/pages/AdminPage.tsx +++ b/client/src/pages/AdminPage.tsx @@ -109,7 +109,7 @@ function AdminNotificationsPanel({ t, toast }: { t: (k: string) => string; toast
-

{t('admin.tabs.adminNotifications')}

+

{t('admin.tabs.notifications')}

{t('admin.notifications.adminNotificationsHint')}

@@ -169,8 +169,7 @@ export default function AdminPage(): React.ReactElement { { id: 'config', label: t('admin.tabs.config') }, { id: 'addons', label: t('admin.tabs.addons') }, { id: 'settings', label: t('admin.tabs.settings') }, - { id: 'notification-channels', label: t('admin.tabs.notificationChannels') }, - { id: 'admin-notifications', label: t('admin.tabs.adminNotifications') }, + { id: 'notifications', label: t('admin.tabs.notifications') }, { id: 'backup', label: t('admin.tabs.backup') }, { id: 'audit', label: t('admin.tabs.audit') }, ...(mcpEnabled ? [{ id: 'mcp-tokens', label: t('admin.tabs.mcpTokens') }] : []), @@ -1099,7 +1098,7 @@ export default function AdminPage(): React.ReactElement {
)} - {activeTab === 'notification-channels' && (() => { + {activeTab === 'notifications' && (() => { // Derive active channels from smtpValues.notification_channels (plural) // with fallback to notification_channel (singular) for existing installs const rawChannels = smtpValues.notification_channels ?? smtpValues.notification_channel ?? 'none' @@ -1135,7 +1134,7 @@ export default function AdminPage(): React.ReactElement { } catch { toast.error(t('common.error')) } } - return ( + return (<>
{/* Email Panel */}
@@ -1297,11 +1296,12 @@ export default function AdminPage(): React.ReactElement {
- ) +
+ +
+ ) })()} - {activeTab === 'admin-notifications' && } - {activeTab === 'backup' && } {activeTab === 'audit' && }