feat(i18n): translate missing keys across all 12 language files

This commit is contained in:
jubnl
2026-04-05 04:33:24 +02:00
parent 991b4065e3
commit 6a36efbf1a
12 changed files with 607 additions and 607 deletions

View File

@@ -513,8 +513,8 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
'admin.addons.catalog.memories.description': 'شارك صور رحلتك عبر Immich',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'بروتوكول سياق النموذج لتكامل مساعد الذكاء الاصطناعي',
'admin.addons.catalog.packing.name': 'Lists',
'admin.addons.catalog.packing.description': 'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.packing.name': 'القوائم',
'admin.addons.catalog.packing.description': 'قوائم التعبئة والمهام لرحلاتك',
'admin.addons.catalog.budget.name': 'الميزانية',
'admin.addons.catalog.budget.description': 'تتبع النفقات وخطط ميزانية الرحلة',
'admin.addons.catalog.documents.name': 'المستندات',
@@ -743,8 +743,8 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
'trip.tabs.reservationsShort': 'حجز',
'trip.tabs.packing': 'قائمة التجهيز',
'trip.tabs.packingShort': 'تجهيز',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.lists': 'القوائم',
'trip.tabs.listsShort': 'القوائم',
'trip.tabs.budget': 'الميزانية',
'trip.tabs.files': 'الملفات',
'trip.loading': 'جارٍ تحميل الرحلة...',
@@ -940,11 +940,11 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
'reservations.linkAssignment': 'ربط بخطة اليوم',
'reservations.pickAssignment': 'اختر عنصرًا من خطتك...',
'reservations.noAssignment': 'بلا ربط',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'reservations.budgetHint': 'A budget entry will be created automatically when saving.',
'reservations.price': 'السعر',
'reservations.budgetCategory': 'فئة الميزانية',
'reservations.budgetCategoryPlaceholder': 'مثال: المواصلات، الإقامة',
'reservations.budgetCategoryAuto': 'تلقائي (حسب نوع الحجز)',
'reservations.budgetHint': 'سيتم إنشاء إدخال في الميزانية تلقائيًا عند الحفظ.',
'reservations.departureDate': 'المغادرة',
'reservations.arrivalDate': 'الوصول',
'reservations.departureTime': 'وقت المغادرة',
@@ -1576,42 +1576,42 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
'notifications.test.tripText': 'إشعار تجريبي للرحلة "{trip}".',
// Todo
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task...',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.detail.create': 'Create task',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.sortByPrio': 'Priority',
'todo.subtab.packing': 'قائمة الأمتعة',
'todo.subtab.todo': 'المهام',
'todo.completed': 'مكتمل',
'todo.filter.all': 'الكل',
'todo.filter.open': 'مفتوح',
'todo.filter.done': 'منجز',
'todo.uncategorized': 'بدون تصنيف',
'todo.namePlaceholder': 'اسم المهمة',
'todo.descriptionPlaceholder': 'وصف (اختياري)',
'todo.unassigned': 'غير مُسنَد',
'todo.noCategory': 'بدون فئة',
'todo.hasDescription': 'له وصف',
'todo.addItem': 'إضافة مهمة جديدة...',
'todo.newCategory': 'اسم الفئة',
'todo.addCategory': 'إضافة فئة',
'todo.newItem': 'مهمة جديدة',
'todo.empty': 'لا توجد مهام بعد. أضف مهمة للبدء!',
'todo.filter.my': 'مهامي',
'todo.filter.overdue': 'متأخرة',
'todo.sidebar.tasks': 'المهام',
'todo.sidebar.categories': 'الفئات',
'todo.detail.title': 'مهمة',
'todo.detail.description': 'وصف',
'todo.detail.category': 'فئة',
'todo.detail.dueDate': 'تاريخ الاستحقاق',
'todo.detail.assignedTo': 'مسند إلى',
'todo.detail.delete': 'حذف',
'todo.detail.save': 'حفظ التغييرات',
'todo.detail.create': 'إنشاء مهمة',
'todo.detail.priority': 'الأولوية',
'todo.detail.noPriority': 'لا شيء',
'todo.sortByPrio': 'الأولوية',
// Notification system (added from feat/notification-system)
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notifyVersionAvailable': 'إصدار جديد متاح',
'settings.notificationPreferences.noChannels': 'لم يتم تكوين قنوات إشعارات. اطلب من المسؤول إعداد إشعارات البريد الإلكتروني أو webhook.',
'settings.webhookUrl.label': 'رابط Webhook',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'أدخل رابط Webhook الخاص بـ Discord أو Slack أو المخصص لتلقي الإشعارات.',
@@ -1626,7 +1626,7 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': 'الإشعارات داخل التطبيق نشطة دائمًا ولا يمكن تعطيلها بشكل عام.',
'admin.notifications.adminWebhookPanel.title': 'Webhook المسؤول',
'admin.notifications.adminWebhookPanel.hint': 'يُستخدم هذا الـ Webhook حصريًا لإشعارات المسؤول (مثل تنبيهات الإصدارات). وهو مستقل عن Webhooks المستخدمين ويُرسل تلقائيًا عند تعيين رابط URL.',
'admin.notifications.adminWebhookPanel.saved': 'تم حفظ رابط Webhook المسؤول',
@@ -1634,16 +1634,16 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.adminWebhookPanel.testFailed': 'فشل إرسال Webhook الاختباري',
'admin.notifications.adminWebhookPanel.alwaysOnHint': 'يُرسل Webhook المسؤول تلقائيًا عند تعيين رابط URL',
'admin.notifications.adminNotificationsHint': 'حدد القنوات التي تُسلّم إشعارات المسؤول (مثل تنبيهات الإصدارات). يُرسل الـ Webhook تلقائيًا عند تعيين رابط URL لـ Webhook المسؤول.',
'admin.tabs.notifications': 'Notifications',
'admin.tabs.notifications': 'الإشعارات',
'admin.tabs.notificationChannels': 'قنوات الإشعارات',
'admin.tabs.adminNotifications': 'إشعارات المسؤول',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notifications.versionAvailable.title': 'تحديث متاح',
'notifications.versionAvailable.text': 'TREK {version} متاح الآن.',
'notifications.versionAvailable.button': 'عرض التفاصيل',
'notif.test.title': '[اختبار] إشعار',
'notif.test.simple.text': 'هذا إشعار اختبار بسيط.',
'notif.test.boolean.text': 'هل تقبل هذا الإشعار الاختباري؟',
'notif.test.navigate.text': 'انقر أدناه للانتقال إلى لوحة التحكم.',
// Notifications
'notif.trip_invite.title': 'دعوة للرحلة',
@@ -1673,8 +1673,8 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
'notif.action.decline': 'رفض',
'notif.generic.title': 'إشعار',
'notif.generic.text': 'لديك إشعار جديد',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] حدث غير معروف',
'notif.dev.unknown_event.text': 'نوع الحدث "{event}" غير مسجل في EVENT_NOTIFICATION_CONFIG',
}
export default ar

View File

@@ -490,8 +490,8 @@ const br: Record<string, string | { name: string; category: string }[]> = {
'admin.addons.subtitle': 'Ative ou desative recursos para personalizar sua experiência no TREK.',
'admin.addons.catalog.memories.name': 'Memórias',
'admin.addons.catalog.memories.description': 'Álbuns de fotos compartilhados em cada viagem',
'admin.addons.catalog.packing.name': 'Lists',
'admin.addons.catalog.packing.description': 'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.packing.name': 'Listas',
'admin.addons.catalog.packing.description': 'Listas de bagagem e tarefas a fazer para suas viagens',
'admin.addons.catalog.budget.name': 'Orçamento',
'admin.addons.catalog.budget.description': 'Acompanhe despesas e planeje o orçamento da viagem',
'admin.addons.catalog.documents.name': 'Documentos',
@@ -725,8 +725,8 @@ const br: Record<string, string | { name: string; category: string }[]> = {
'trip.tabs.reservationsShort': 'Reservas',
'trip.tabs.packing': 'Lista de mala',
'trip.tabs.packingShort': 'Mala',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.lists': 'Listas',
'trip.tabs.listsShort': 'Listas',
'trip.tabs.budget': 'Orçamento',
'trip.tabs.files': 'Arquivos',
'trip.loading': 'Carregando viagem...',
@@ -921,11 +921,11 @@ const br: Record<string, string | { name: string; category: string }[]> = {
'reservations.linkAssignment': 'Vincular à atribuição do dia',
'reservations.pickAssignment': 'Selecione uma atribuição do seu plano...',
'reservations.noAssignment': 'Sem vínculo (avulsa)',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'reservations.budgetHint': 'A budget entry will be created automatically when saving.',
'reservations.price': 'Preço',
'reservations.budgetCategory': 'Categoria de orçamento',
'reservations.budgetCategoryPlaceholder': 'ex. Transporte, Acomodação',
'reservations.budgetCategoryAuto': 'Automático (pelo tipo de reserva)',
'reservations.budgetHint': 'Uma entrada de orçamento será criada automaticamente ao salvar.',
'reservations.departureDate': 'Partida',
'reservations.arrivalDate': 'Chegada',
'reservations.departureTime': 'Hora partida',
@@ -1571,42 +1571,42 @@ const br: Record<string, string | { name: string; category: string }[]> = {
'notifications.test.tripText': 'Notificação de teste para a viagem "{trip}".',
// Todo
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task...',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.detail.create': 'Create task',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.sortByPrio': 'Priority',
'todo.subtab.packing': 'Lista de bagagem',
'todo.subtab.todo': 'A fazer',
'todo.completed': 'concluído(s)',
'todo.filter.all': 'Todos',
'todo.filter.open': 'Aberto',
'todo.filter.done': 'Concluído',
'todo.uncategorized': 'Sem categoria',
'todo.namePlaceholder': 'Nome da tarefa',
'todo.descriptionPlaceholder': 'Descrição (opcional)',
'todo.unassigned': 'Não atribuído',
'todo.noCategory': 'Sem categoria',
'todo.hasDescription': 'Com descrição',
'todo.addItem': 'Adicionar nova tarefa...',
'todo.newCategory': 'Nome da categoria',
'todo.addCategory': 'Adicionar categoria',
'todo.newItem': 'Nova tarefa',
'todo.empty': 'Nenhuma tarefa ainda. Adicione uma tarefa para começar!',
'todo.filter.my': 'Minhas tarefas',
'todo.filter.overdue': 'Atrasada',
'todo.sidebar.tasks': 'Tarefas',
'todo.sidebar.categories': 'Categorias',
'todo.detail.title': 'Tarefa',
'todo.detail.description': 'Descrição',
'todo.detail.category': 'Categoria',
'todo.detail.dueDate': 'Data de vencimento',
'todo.detail.assignedTo': 'Atribuído a',
'todo.detail.delete': 'Excluir',
'todo.detail.save': 'Salvar alterações',
'todo.detail.create': 'Criar tarefa',
'todo.detail.priority': 'Prioridade',
'todo.detail.noPriority': 'Nenhuma',
'todo.sortByPrio': 'Prioridade',
// Notification system (added from feat/notification-system)
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notifyVersionAvailable': 'Nova versão disponível',
'settings.notificationPreferences.noChannels': 'Nenhum canal de notificação configurado. Peça a um administrador para configurar notificações por e-mail ou webhook.',
'settings.webhookUrl.label': 'URL do webhook',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Insira a URL do seu webhook do Discord, Slack ou personalizado para receber notificações.',
@@ -1621,7 +1621,7 @@ const br: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': 'As notificações no aplicativo estão sempre ativas e não podem ser desativadas globalmente.',
'admin.notifications.adminWebhookPanel.title': 'Webhook de admin',
'admin.notifications.adminWebhookPanel.hint': 'Este webhook é usado exclusivamente para notificações de admin (ex. alertas de versão). É independente dos webhooks de usuários e dispara automaticamente quando uma URL está configurada.',
'admin.notifications.adminWebhookPanel.saved': 'URL do webhook de admin salva',
@@ -1629,16 +1629,16 @@ const br: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.adminWebhookPanel.testFailed': 'Falha no webhook de teste',
'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': 'Notifications',
'admin.tabs.notifications': 'Notificações',
'admin.tabs.notificationChannels': 'Canais de notificação',
'admin.tabs.adminNotifications': 'Notificações de admin',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notifications.versionAvailable.title': 'Atualização disponível',
'notifications.versionAvailable.text': 'TREK {version} já está disponível.',
'notifications.versionAvailable.button': 'Ver detalhes',
'notif.test.title': '[Teste] Notificação',
'notif.test.simple.text': 'Esta é uma notificação de teste simples.',
'notif.test.boolean.text': 'Você aceita esta notificação de teste?',
'notif.test.navigate.text': 'Clique abaixo para ir ao painel.',
// Notifications
'notif.trip_invite.title': 'Convite para viagem',
@@ -1668,8 +1668,8 @@ const br: Record<string, string | { name: string; category: string }[]> = {
'notif.action.decline': 'Recusar',
'notif.generic.title': 'Notificação',
'notif.generic.text': 'Você tem uma nova notificação',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] Evento desconhecido',
'notif.dev.unknown_event.text': 'O tipo de evento "{event}" não está registrado em EVENT_NOTIFICATION_CONFIG',
}
export default br

View File

@@ -490,8 +490,8 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
'admin.addons.subtitle': 'Zapněte nebo vypněte funkce a přizpůsobte si TREK.',
'admin.addons.catalog.memories.name': 'Fotky (Immich)',
'admin.addons.catalog.memories.description': 'Sdílejte cestovní fotky přes vaši instanci Immich',
'admin.addons.catalog.packing.name': 'Lists',
'admin.addons.catalog.packing.description': 'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.packing.name': 'Seznamy',
'admin.addons.catalog.packing.description': 'Balicí seznamy a úkoly pro vaše výlety',
'admin.addons.catalog.budget.name': 'Rozpočet',
'admin.addons.catalog.budget.description': 'Sledování výdajů a plánování rozpočtu cesty',
'admin.addons.catalog.documents.name': 'Dokumenty',
@@ -741,8 +741,8 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
'trip.tabs.reservationsShort': 'Rez.',
'trip.tabs.packing': 'Seznam věcí',
'trip.tabs.packingShort': 'Balení',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.lists': 'Seznamy',
'trip.tabs.listsShort': 'Seznamy',
'trip.tabs.budget': 'Rozpočet',
'trip.tabs.files': 'Soubory',
'trip.loading': 'Načítání cesty...',
@@ -938,11 +938,11 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
'reservations.linkAssignment': 'Propojit s přiřazením dne',
'reservations.pickAssignment': 'Vyberte přiřazení z vašeho plánu...',
'reservations.noAssignment': 'Bez propojení (samostatné)',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'reservations.budgetHint': 'A budget entry will be created automatically when saving.',
'reservations.price': 'Cena',
'reservations.budgetCategory': 'Kategorie rozpočtu',
'reservations.budgetCategoryPlaceholder': 'např. Doprava, Ubytování',
'reservations.budgetCategoryAuto': 'Auto (podle typu rezervace)',
'reservations.budgetHint': 'Při ukládání bude automaticky vytvořena položka rozpočtu.',
'reservations.departureDate': 'Odlet',
'reservations.arrivalDate': 'Přílet',
'reservations.departureTime': 'Čas odletu',
@@ -1576,42 +1576,42 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
'notifications.test.tripText': 'Testovací oznámení pro výlet "{trip}".',
// Todo
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task...',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.detail.create': 'Create task',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.sortByPrio': 'Priority',
'todo.subtab.packing': 'Balicí seznam',
'todo.subtab.todo': 'Úkoly',
'todo.completed': 'dokončeno',
'todo.filter.all': 'Vše',
'todo.filter.open': 'Otevřené',
'todo.filter.done': 'Hotové',
'todo.uncategorized': 'Bez kategorie',
'todo.namePlaceholder': 'Název úkolu',
'todo.descriptionPlaceholder': 'Popis (volitelné)',
'todo.unassigned': 'Nepřiřazeno',
'todo.noCategory': 'Bez kategorie',
'todo.hasDescription': 'Má popis',
'todo.addItem': 'Přidat nový úkol...',
'todo.newCategory': 'Název kategorie',
'todo.addCategory': 'Přidat kategorii',
'todo.newItem': 'Nový úkol',
'todo.empty': 'Zatím žádné úkoly. Přidejte úkol a začněte!',
'todo.filter.my': 'Moje úkoly',
'todo.filter.overdue': 'Po termínu',
'todo.sidebar.tasks': 'Úkoly',
'todo.sidebar.categories': 'Kategorie',
'todo.detail.title': 'Úkol',
'todo.detail.description': 'Popis',
'todo.detail.category': 'Kategorie',
'todo.detail.dueDate': 'Termín splnění',
'todo.detail.assignedTo': 'Přiřazeno',
'todo.detail.delete': 'Smazat',
'todo.detail.save': 'Uložit změny',
'todo.detail.create': 'Vytvořit úkol',
'todo.detail.priority': 'Priorita',
'todo.detail.noPriority': 'Žádná',
'todo.sortByPrio': 'Priorita',
// Notification system (added from feat/notification-system)
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notifyVersionAvailable': 'Nová verze k dispozici',
'settings.notificationPreferences.noChannels': 'Nejsou nakonfigurovány žádné kanály oznámení. Požádejte správce o nastavení e-mailových nebo webhook oznámení.',
'settings.webhookUrl.label': 'URL webhooku',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Zadejte URL vašeho Discord, Slack nebo vlastního webhooku pro příjem oznámení.',
@@ -1626,7 +1626,7 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': 'In-app oznámení jsou vždy aktivní a nelze je globálně vypnout.',
'admin.notifications.adminWebhookPanel.title': 'Admin webhook',
'admin.notifications.adminWebhookPanel.hint': 'Tento webhook se používá výhradně pro admin oznámení (např. upozornění na verze). Je nezávislý na uživatelských webhooků a odesílá automaticky, pokud je nastavena URL.',
'admin.notifications.adminWebhookPanel.saved': 'URL admin webhooku uložena',
@@ -1634,16 +1634,16 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.adminWebhookPanel.testFailed': 'Testovací webhook selhal',
'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': 'Notifications',
'admin.tabs.notifications': 'Oznámení',
'admin.tabs.notificationChannels': 'Kanály oznámení',
'admin.tabs.adminNotifications': 'Admin oznámení',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notifications.versionAvailable.title': 'Dostupná aktualizace',
'notifications.versionAvailable.text': 'TREK {version} je nyní k dispozici.',
'notifications.versionAvailable.button': 'Zobrazit podrobnosti',
'notif.test.title': '[Test] Oznámení',
'notif.test.simple.text': 'Toto je jednoduché testovací oznámení.',
'notif.test.boolean.text': 'Přijmete toto testovací oznámení?',
'notif.test.navigate.text': 'Klikněte níže pro přechod na přehled.',
// Notifications
'notif.trip_invite.title': 'Pozvánka na výlet',
@@ -1673,8 +1673,8 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
'notif.action.decline': 'Odmítnout',
'notif.generic.title': 'Oznámení',
'notif.generic.text': 'Máte nové oznámení',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] Neznámá událost',
'notif.dev.unknown_event.text': 'Typ události "{event}" není registrován v EVENT_NOTIFICATION_CONFIG',
}
export default cs

View File

@@ -1607,8 +1607,8 @@ const de: Record<string, string | { name: string; category: string }[]> = {
'todo.detail.create': 'Aufgabe erstellen',
// Notification system (added from feat/notification-system)
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notifyVersionAvailable': 'Neue Version verfügbar',
'settings.notificationPreferences.noChannels': 'Keine Benachrichtigungskanäle konfiguriert. Bitte einen Administrator, E-Mail- oder Webhook-Benachrichtigungen einzurichten.',
'settings.webhookUrl.label': 'Webhook URL',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Gib deine Discord-, Slack- oder benutzerdefinierte Webhook-URL ein, um Benachrichtigungen zu erhalten.',
@@ -1623,7 +1623,7 @@ const de: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': 'In-App-Benachrichtigungen sind immer aktiv und können nicht global deaktiviert werden.',
'admin.notifications.adminWebhookPanel.title': 'Admin-Webhook',
'admin.notifications.adminWebhookPanel.hint': 'Dieser Webhook wird ausschließlich für Admin-Benachrichtigungen verwendet (z. B. Versions-Updates). Er ist unabhängig von den Benutzer-Webhooks und sendet automatisch, wenn eine URL konfiguriert ist.',
'admin.notifications.adminWebhookPanel.saved': 'Admin-Webhook-URL gespeichert',
@@ -1631,16 +1631,16 @@ const de: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.adminWebhookPanel.testFailed': 'Test-Webhook fehlgeschlagen',
'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': 'Notifications',
'admin.tabs.notifications': 'Benachrichtigungen',
'admin.tabs.notificationChannels': 'Benachrichtigungskanäle',
'admin.tabs.adminNotifications': 'Admin-Benachrichtigungen',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notifications.versionAvailable.title': 'Update verfügbar',
'notifications.versionAvailable.text': 'TREK {version} ist jetzt verfügbar.',
'notifications.versionAvailable.button': 'Details anzeigen',
'notif.test.title': '[Test] Benachrichtigung',
'notif.test.simple.text': 'Dies ist eine einfache Testbenachrichtigung.',
'notif.test.boolean.text': 'Akzeptierst du diese Testbenachrichtigung?',
'notif.test.navigate.text': 'Klicke unten, um zum Dashboard zu navigieren.',
// Notifications
'notif.trip_invite.title': 'Reiseeinladung',
@@ -1670,8 +1670,8 @@ const de: Record<string, string | { name: string; category: string }[]> = {
'notif.action.decline': 'Ablehnen',
'notif.generic.title': 'Benachrichtigung',
'notif.generic.text': 'Du hast eine neue Benachrichtigung',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] Unbekanntes Ereignis',
'notif.dev.unknown_event.text': 'Ereignistyp "{event}" ist nicht in EVENT_NOTIFICATION_CONFIG registriert',
}
export default de

View File

@@ -717,8 +717,8 @@ const es: Record<string, string> = {
'trip.tabs.reservationsShort': 'Reservas',
'trip.tabs.packing': 'Lista de equipaje',
'trip.tabs.packingShort': 'Equipaje',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.lists': 'Listas',
'trip.tabs.listsShort': 'Listas',
'trip.tabs.budget': 'Presupuesto',
'trip.tabs.files': 'Archivos',
'trip.loading': 'Cargando viaje...',
@@ -897,11 +897,11 @@ const es: Record<string, string> = {
'reservations.linkAssignment': 'Vincular a una asignación del día',
'reservations.pickAssignment': 'Selecciona una asignación de tu plan...',
'reservations.noAssignment': 'Sin vínculo (independiente)',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'reservations.budgetHint': 'A budget entry will be created automatically when saving.',
'reservations.price': 'Precio',
'reservations.budgetCategory': 'Categoría de presupuesto',
'reservations.budgetCategoryPlaceholder': 'ej. Transporte, Alojamiento',
'reservations.budgetCategoryAuto': 'Automático (según tipo de reserva)',
'reservations.budgetHint': 'Se crea automáticamente una entrada presupuestaria al guardar.',
'reservations.departureDate': 'Salida',
'reservations.arrivalDate': 'Llegada',
'reservations.departureTime': 'Hora salida',
@@ -1193,8 +1193,8 @@ const es: Record<string, string> = {
'admin.addons.catalog.memories.description': 'Comparte fotos de viaje a través de tu instancia de Immich',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'Protocolo de contexto de modelo para integración con asistentes de IA',
'admin.addons.catalog.packing.name': 'Lists',
'admin.addons.catalog.packing.description': 'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.packing.name': 'Listas',
'admin.addons.catalog.packing.description': 'Listas de equipaje y tareas pendientes para tus viajes',
'admin.addons.catalog.budget.name': 'Presupuesto',
'admin.addons.catalog.budget.description': 'Controla los gastos y planifica el presupuesto del viaje',
'admin.addons.catalog.documents.name': 'Documentos',
@@ -1578,42 +1578,42 @@ const es: Record<string, string> = {
'notifications.test.tripText': 'Notificación de prueba para el viaje "{trip}".',
// Todo
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task...',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.detail.create': 'Create task',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.sortByPrio': 'Priority',
'todo.subtab.packing': 'Lista de equipaje',
'todo.subtab.todo': 'Por hacer',
'todo.completed': 'completado(s)',
'todo.filter.all': 'Todo',
'todo.filter.open': 'Abierto',
'todo.filter.done': 'Hecho',
'todo.uncategorized': 'Sin categoría',
'todo.namePlaceholder': 'Nombre de la tarea',
'todo.descriptionPlaceholder': 'Descripción (opcional)',
'todo.unassigned': 'Sin asignar',
'todo.noCategory': 'Sin categoría',
'todo.hasDescription': 'Con descripción',
'todo.addItem': 'Añadir nueva tarea...',
'todo.newCategory': 'Nombre de la categoría',
'todo.addCategory': 'Añadir categoría',
'todo.newItem': 'Nueva tarea',
'todo.empty': 'Aún no hay tareas. ¡Añade una tarea para empezar!',
'todo.filter.my': 'Mis tareas',
'todo.filter.overdue': 'Vencida',
'todo.sidebar.tasks': 'Tareas',
'todo.sidebar.categories': 'Categorías',
'todo.detail.title': 'Tarea',
'todo.detail.description': 'Descripción',
'todo.detail.category': 'Categoría',
'todo.detail.dueDate': 'Fecha límite',
'todo.detail.assignedTo': 'Asignado a',
'todo.detail.delete': 'Eliminar',
'todo.detail.save': 'Guardar cambios',
'todo.detail.create': 'Crear tarea',
'todo.detail.priority': 'Prioridad',
'todo.detail.noPriority': 'Ninguna',
'todo.sortByPrio': 'Prioridad',
// Notification system (added from feat/notification-system)
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notifyVersionAvailable': 'Nueva versión disponible',
'settings.notificationPreferences.noChannels': 'No hay canales de notificación configurados. Pide a un administrador que configure notificaciones por correo o webhook.',
'settings.webhookUrl.label': 'URL del webhook',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Introduce tu URL de webhook de Discord, Slack o personalizada para recibir notificaciones.',
@@ -1628,7 +1628,7 @@ const es: Record<string, string> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': 'Las notificaciones in-app siempre están activas y no se pueden desactivar globalmente.',
'admin.notifications.adminWebhookPanel.title': 'Webhook de admin',
'admin.notifications.adminWebhookPanel.hint': 'Este webhook se usa exclusivamente para notificaciones de admin (ej. alertas de versión). Es independiente de los webhooks de usuario y se activa automáticamente si hay una URL configurada.',
'admin.notifications.adminWebhookPanel.saved': 'URL del webhook de admin guardada',
@@ -1636,16 +1636,16 @@ const es: Record<string, string> = {
'admin.notifications.adminWebhookPanel.testFailed': 'Error al enviar el webhook de prueba',
'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': 'Notifications',
'admin.tabs.notifications': 'Notificaciones',
'admin.tabs.notificationChannels': 'Canales de notificación',
'admin.tabs.adminNotifications': 'Notificaciones de admin',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notifications.versionAvailable.title': 'Actualización disponible',
'notifications.versionAvailable.text': 'TREK {version} ya está disponible.',
'notifications.versionAvailable.button': 'Ver detalles',
'notif.test.title': '[Test] Notificación',
'notif.test.simple.text': 'Esta es una notificación de prueba simple.',
'notif.test.boolean.text': '¿Aceptas esta notificación de prueba?',
'notif.test.navigate.text': 'Haz clic abajo para ir al panel de control.',
// Notifications
'notif.trip_invite.title': 'Invitación al viaje',
@@ -1675,8 +1675,8 @@ const es: Record<string, string> = {
'notif.action.decline': 'Rechazar',
'notif.generic.title': 'Notificación',
'notif.generic.text': 'Tienes una nueva notificación',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] Evento desconocido',
'notif.dev.unknown_event.text': 'El tipo de evento "{event}" no está registrado en EVENT_NOTIFICATION_CONFIG',
}
export default es

View File

@@ -491,8 +491,8 @@ const fr: Record<string, string> = {
'admin.addons.catalog.memories.description': 'Partagez vos photos de voyage via votre instance Immich',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'Protocole de contexte de modèle pour l\'intégration d\'assistants IA',
'admin.addons.catalog.packing.name': 'Lists',
'admin.addons.catalog.packing.description': 'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.packing.name': 'Listes',
'admin.addons.catalog.packing.description': 'Listes de bagages et tâches à faire pour vos voyages',
'admin.addons.catalog.budget.name': 'Budget',
'admin.addons.catalog.budget.description': 'Suivez les dépenses et planifiez votre budget de voyage',
'admin.addons.catalog.documents.name': 'Documents',
@@ -740,8 +740,8 @@ const fr: Record<string, string> = {
'trip.tabs.reservationsShort': 'Résa',
'trip.tabs.packing': 'Liste de bagages',
'trip.tabs.packingShort': 'Bagages',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.lists': 'Listes',
'trip.tabs.listsShort': 'Listes',
'trip.tabs.budget': 'Budget',
'trip.tabs.files': 'Fichiers',
'trip.loading': 'Chargement du voyage…',
@@ -936,11 +936,11 @@ const fr: Record<string, string> = {
'reservations.linkAssignment': 'Lier à l\'affectation du jour',
'reservations.pickAssignment': 'Sélectionnez une affectation de votre plan…',
'reservations.noAssignment': 'Aucun lien (autonome)',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'reservations.budgetHint': 'A budget entry will be created automatically when saving.',
'reservations.price': 'Prix',
'reservations.budgetCategory': 'Catégorie budgétaire',
'reservations.budgetCategoryPlaceholder': 'ex. Transport, Hébergement',
'reservations.budgetCategoryAuto': 'Auto (selon le type de réservation)',
'reservations.budgetHint': 'Une entrée budgétaire sera créée automatiquement lors de l\'enregistrement.',
'reservations.departureDate': 'Départ',
'reservations.arrivalDate': 'Arrivée',
'reservations.departureTime': 'Heure dép.',
@@ -1572,42 +1572,42 @@ const fr: Record<string, string> = {
'notifications.test.tripText': 'Notification de test pour le voyage "{trip}".',
// Todo
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task...',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.subtab.packing': 'Liste de bagages',
'todo.subtab.todo': 'À faire',
'todo.completed': 'terminé(s)',
'todo.filter.all': 'Tout',
'todo.filter.open': 'En cours',
'todo.filter.done': 'Terminé',
'todo.uncategorized': 'Sans catégorie',
'todo.namePlaceholder': 'Nom de la tâche',
'todo.descriptionPlaceholder': 'Description (facultative)',
'todo.unassigned': 'Non assigné',
'todo.noCategory': 'Aucune catégorie',
'todo.hasDescription': 'Avec description',
'todo.addItem': 'Ajouter une tâche...',
'todo.newCategory': 'Nom de la catégorie',
'todo.addCategory': 'Ajouter une catégorie',
'todo.newItem': 'Nouvelle tâche',
'todo.empty': 'Aucune tâche pour l\'instant. Ajoutez une tâche pour commencer !',
'todo.filter.my': 'Mes tâches',
'todo.filter.overdue': 'En retard',
'todo.sidebar.tasks': 'Tâches',
'todo.sidebar.categories': 'Catégories',
'todo.detail.title': 'Tâche',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.detail.create': 'Create task',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.sortByPrio': 'Priority',
'todo.detail.category': 'Catégorie',
'todo.detail.dueDate': 'Date d\'échéance',
'todo.detail.assignedTo': 'Assigné à',
'todo.detail.delete': 'Supprimer',
'todo.detail.save': 'Enregistrer les modifications',
'todo.detail.create': 'Créer la tâche',
'todo.detail.priority': 'Priorité',
'todo.detail.noPriority': 'Aucune',
'todo.sortByPrio': 'Priorité',
// Notification system (added from feat/notification-system)
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notifyVersionAvailable': 'Nouvelle version disponible',
'settings.notificationPreferences.noChannels': 'Aucun canal de notification n\'est configuré. Demandez à un administrateur de configurer les notifications par e-mail ou webhook.',
'settings.webhookUrl.label': 'URL du webhook',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Entrez votre URL de webhook Discord, Slack ou personnalisée pour recevoir des notifications.',
@@ -1622,7 +1622,7 @@ const fr: Record<string, string> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': 'Les notifications in-app sont toujours actives et ne peuvent pas être désactivées globalement.',
'admin.notifications.adminWebhookPanel.title': 'Webhook admin',
'admin.notifications.adminWebhookPanel.hint': 'Ce webhook est utilisé exclusivement pour les notifications admin (ex. alertes de version). Il est séparé des webhooks utilisateur et s\'active automatiquement si une URL est configurée.',
'admin.notifications.adminWebhookPanel.saved': 'URL du webhook admin enregistrée',
@@ -1633,13 +1633,13 @@ const fr: Record<string, string> = {
'admin.tabs.notifications': 'Notifications',
'admin.tabs.notificationChannels': 'Canaux de notification',
'admin.tabs.adminNotifications': 'Notifications admin',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notifications.versionAvailable.title': 'Mise à jour disponible',
'notifications.versionAvailable.text': 'TREK {version} est maintenant disponible.',
'notifications.versionAvailable.button': 'Voir les détails',
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notif.test.simple.text': 'Ceci est une simple notification de test.',
'notif.test.boolean.text': 'Acceptez-vous cette notification de test ?',
'notif.test.navigate.text': 'Cliquez ci-dessous pour accéder au tableau de bord.',
// Notifications
'notif.trip_invite.title': 'Invitation au voyage',
@@ -1669,8 +1669,8 @@ const fr: Record<string, string> = {
'notif.action.decline': 'Refuser',
'notif.generic.title': 'Notification',
'notif.generic.text': 'Vous avez une nouvelle notification',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] Événement inconnu',
'notif.dev.unknown_event.text': 'Le type d\'événement "{event}" n\'est pas enregistré dans EVENT_NOTIFICATION_CONFIG',
}
export default fr

View File

@@ -488,8 +488,8 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
'admin.tabs.addons': 'Bővítmények',
'admin.addons.title': 'Bővítmények',
'admin.addons.subtitle': 'Funkciók engedélyezése vagy letiltása a TREK testreszabásához.',
'admin.addons.catalog.packing.name': 'Lists',
'admin.addons.catalog.packing.description': 'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.packing.name': 'Listák',
'admin.addons.catalog.packing.description': 'Csomagolási listák és teendők az utazásaidhoz',
'admin.addons.catalog.budget.name': 'Költségvetés',
'admin.addons.catalog.budget.description': 'Kiadások nyomon követése és az utazási költségvetés tervezése',
'admin.addons.catalog.documents.name': 'Dokumentumok',
@@ -741,8 +741,8 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
'trip.tabs.reservationsShort': 'Foglalás',
'trip.tabs.packing': 'Csomagolási lista',
'trip.tabs.packingShort': 'Csomag',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.lists': 'Listák',
'trip.tabs.listsShort': 'Listák',
'trip.tabs.budget': 'Költségvetés',
'trip.tabs.files': 'Fájlok',
'trip.loading': 'Utazás betöltése...',
@@ -937,11 +937,11 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
'reservations.linkAssignment': 'Összekapcsolás napi tervvel',
'reservations.pickAssignment': 'Válassz hozzárendelést a tervedből...',
'reservations.noAssignment': 'Nincs összekapcsolás (önálló)',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'reservations.budgetHint': 'A budget entry will be created automatically when saving.',
'reservations.price': 'Ár',
'reservations.budgetCategory': 'Költségvetési kategória',
'reservations.budgetCategoryPlaceholder': 'pl. Közlekedés, Szállás',
'reservations.budgetCategoryAuto': 'Automatikus (foglalás típusa alapján)',
'reservations.budgetHint': 'Mentéskor automatikusan létrejön egy költségvetési tétel.',
'reservations.departureDate': 'Indulás',
'reservations.arrivalDate': 'Érkezés',
'reservations.departureTime': 'Indulási idő',
@@ -1573,42 +1573,42 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
'notifications.test.tripText': 'Teszt értesítés a(z) "{trip}" utazáshoz.',
// Todo
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task...',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.detail.create': 'Create task',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.sortByPrio': 'Priority',
'todo.subtab.packing': 'Csomagolási lista',
'todo.subtab.todo': 'Teendők',
'todo.completed': 'kész',
'todo.filter.all': 'Mind',
'todo.filter.open': 'Nyitott',
'todo.filter.done': 'Kész',
'todo.uncategorized': 'Kategória nélküli',
'todo.namePlaceholder': 'Feladat neve',
'todo.descriptionPlaceholder': 'Leírás (opcionális)',
'todo.unassigned': 'Nem hozzárendelt',
'todo.noCategory': 'Nincs kategória',
'todo.hasDescription': 'Van leírás',
'todo.addItem': 'Új feladat hozzáadása...',
'todo.newCategory': 'Kategória neve',
'todo.addCategory': 'Kategória hozzáadása',
'todo.newItem': 'Új feladat',
'todo.empty': 'Még nincsenek feladatok. Adj hozzá egyet a kezdéshez!',
'todo.filter.my': 'Saját feladataim',
'todo.filter.overdue': 'Lejárt',
'todo.sidebar.tasks': 'Feladatok',
'todo.sidebar.categories': 'Kategóriák',
'todo.detail.title': 'Feladat',
'todo.detail.description': 'Leírás',
'todo.detail.category': 'Kategória',
'todo.detail.dueDate': 'Határidő',
'todo.detail.assignedTo': 'Hozzárendelve',
'todo.detail.delete': 'Törlés',
'todo.detail.save': 'Módosítások mentése',
'todo.detail.create': 'Feladat létrehozása',
'todo.detail.priority': 'Prioritás',
'todo.detail.noPriority': 'Nincs',
'todo.sortByPrio': 'Prioritás',
// Notification system (added from feat/notification-system)
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notifyVersionAvailable': 'Új verzió elérhető',
'settings.notificationPreferences.noChannels': 'Nincsenek értesítési csatornák beállítva. Kérd meg a rendszergazdát, hogy állítson be e-mail vagy webhook értesítéseket.',
'settings.webhookUrl.label': 'Webhook URL',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Adja meg a Discord, Slack vagy egyéni webhook URL-jét az értesítések fogadásához.',
@@ -1623,7 +1623,7 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': 'Az alkalmazáson belüli értesítések mindig aktívak, és globálisan nem kapcsolhatók ki.',
'admin.notifications.adminWebhookPanel.title': 'Admin webhook',
'admin.notifications.adminWebhookPanel.hint': 'Ez a webhook kizárólag admin értesítésekhez használatos (pl. verziófrissítési figyelmeztetések). Független a felhasználói webhookoktól, és automatikusan küld, ha URL van beállítva.',
'admin.notifications.adminWebhookPanel.saved': 'Admin webhook URL mentve',
@@ -1631,16 +1631,16 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.adminWebhookPanel.testFailed': 'Teszt webhook sikertelen',
'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': 'Notifications',
'admin.tabs.notifications': 'Értesítések',
'admin.tabs.notificationChannels': 'Értesítési csatornák',
'admin.tabs.adminNotifications': 'Admin értesítések',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'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',
'notif.test.title': '[Teszt] Értesítés',
'notif.test.simple.text': 'Ez egy egyszerű teszt értesítés.',
'notif.test.boolean.text': 'Elfogadod ezt a teszt értesítést?',
'notif.test.navigate.text': 'Kattints alább az irányítópultra navigáláshoz.',
// Notifications
'notif.trip_invite.title': 'Utazásra meghívó',
@@ -1670,8 +1670,8 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
'notif.action.decline': 'Elutasítás',
'notif.generic.title': 'Értesítés',
'notif.generic.text': 'Új értesítésed érkezett',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] Ismeretlen esemény',
'notif.dev.unknown_event.text': 'A(z) "{event}" eseménytípus nincs regisztrálva az EVENT_NOTIFICATION_CONFIG-ban',
}
export default hu

View File

@@ -487,8 +487,8 @@ const it: Record<string, string | { name: string; category: string }[]> = {
'admin.tabs.addons': 'Moduli',
'admin.addons.title': 'Moduli',
'admin.addons.subtitle': 'Abilita o disabilita le funzionalità per personalizzare la tua esperienza TREK.',
'admin.addons.catalog.packing.name': 'Lists',
'admin.addons.catalog.packing.description': 'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.packing.name': 'Liste',
'admin.addons.catalog.packing.description': 'Liste di imballaggio e attività da svolgere per i tuoi viaggi',
'admin.addons.catalog.budget.name': 'Budget',
'admin.addons.catalog.budget.description': 'Tieni traccia delle spese e pianifica il budget del tuo viaggio',
'admin.addons.catalog.documents.name': 'Documenti',
@@ -741,8 +741,8 @@ const it: Record<string, string | { name: string; category: string }[]> = {
'trip.tabs.reservationsShort': 'Pren.',
'trip.tabs.packing': 'Lista valigia',
'trip.tabs.packingShort': 'Valigia',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.lists': 'Liste',
'trip.tabs.listsShort': 'Liste',
'trip.tabs.budget': 'Budget',
'trip.tabs.files': 'File',
'trip.loading': 'Caricamento viaggio...',
@@ -937,11 +937,11 @@ const it: Record<string, string | { name: string; category: string }[]> = {
'reservations.linkAssignment': 'Collega all\'assegnazione del giorno',
'reservations.pickAssignment': 'Seleziona un\'assegnazione dal tuo programma...',
'reservations.noAssignment': 'Nessun collegamento (autonomo)',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'reservations.budgetHint': 'A budget entry will be created automatically when saving.',
'reservations.price': 'Prezzo',
'reservations.budgetCategory': 'Categoria budget',
'reservations.budgetCategoryPlaceholder': 'es. Trasporto, Alloggio',
'reservations.budgetCategoryAuto': 'Auto (dal tipo di prenotazione)',
'reservations.budgetHint': 'Una voce di budget verrà creata automaticamente al salvataggio.',
'reservations.departureDate': 'Partenza',
'reservations.arrivalDate': 'Arrivo',
'reservations.departureTime': 'Ora part.',
@@ -1002,7 +1002,7 @@ const it: Record<string, string | { name: string; category: string }[]> = {
// Files
'files.title': 'File',
'files.count': '{count} file',
'files.countSingular': '1 file',
'files.countSingular': '1 documento',
'files.uploaded': '{count} caricati',
'files.uploadError': 'Caricamento non riuscito',
'files.dropzone': 'Trascina qui i file',
@@ -1573,42 +1573,42 @@ const it: Record<string, string | { name: string; category: string }[]> = {
'notifications.test.tripText': 'Notifica di test per il viaggio "{trip}".',
// Todo
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task...',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.detail.create': 'Create task',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.sortByPrio': 'Priority',
'todo.subtab.packing': 'Lista di imballaggio',
'todo.subtab.todo': 'Da fare',
'todo.completed': 'completato/i',
'todo.filter.all': 'Tutti',
'todo.filter.open': 'Aperto',
'todo.filter.done': 'Fatto',
'todo.uncategorized': 'Senza categoria',
'todo.namePlaceholder': 'Nome attività',
'todo.descriptionPlaceholder': 'Descrizione (facoltativa)',
'todo.unassigned': 'Non assegnato',
'todo.noCategory': 'Nessuna categoria',
'todo.hasDescription': 'Ha descrizione',
'todo.addItem': 'Aggiungi nuova attività...',
'todo.newCategory': 'Nome categoria',
'todo.addCategory': 'Aggiungi categoria',
'todo.newItem': 'Nuova attività',
'todo.empty': 'Nessuna attività ancora. Aggiungi un\'attività per iniziare!',
'todo.filter.my': 'Le mie attività',
'todo.filter.overdue': 'Scaduta',
'todo.sidebar.tasks': 'Attività',
'todo.sidebar.categories': 'Categorie',
'todo.detail.title': 'Attività',
'todo.detail.description': 'Descrizione',
'todo.detail.category': 'Categoria',
'todo.detail.dueDate': 'Scadenza',
'todo.detail.assignedTo': 'Assegnato a',
'todo.detail.delete': 'Elimina',
'todo.detail.save': 'Salva modifiche',
'todo.detail.create': 'Crea attività',
'todo.detail.priority': 'Priorità',
'todo.detail.noPriority': 'Nessuna',
'todo.sortByPrio': 'Priorità',
// Notification system (added from feat/notification-system)
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notifyVersionAvailable': 'Nuova versione disponibile',
'settings.notificationPreferences.noChannels': 'Nessun canale di notifica configurato. Chiedi a un amministratore di configurare notifiche via e-mail o webhook.',
'settings.webhookUrl.label': 'URL webhook',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Inserisci il tuo URL webhook Discord, Slack o personalizzato per ricevere notifiche.',
@@ -1623,7 +1623,7 @@ const it: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': 'Le notifiche in-app sono sempre attive e non possono essere disabilitate globalmente.',
'admin.notifications.adminWebhookPanel.title': 'Webhook admin',
'admin.notifications.adminWebhookPanel.hint': 'Questo webhook viene usato esclusivamente per le notifiche admin (es. avvisi di versione). È separato dai webhook utente e si attiva automaticamente quando è configurato un URL.',
'admin.notifications.adminWebhookPanel.saved': 'URL webhook admin salvato',
@@ -1634,13 +1634,13 @@ const it: Record<string, string | { name: string; category: string }[]> = {
'admin.tabs.notifications': 'Notifications',
'admin.tabs.notificationChannels': 'Canali di notifica',
'admin.tabs.adminNotifications': 'Notifiche admin',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notifications.versionAvailable.title': 'Aggiornamento disponibile',
'notifications.versionAvailable.text': 'TREK {version} è ora disponibile.',
'notifications.versionAvailable.button': 'Visualizza dettagli',
'notif.test.title': '[Test] Notifica',
'notif.test.simple.text': 'Questa è una semplice notifica di test.',
'notif.test.boolean.text': 'Accetti questa notifica di test?',
'notif.test.navigate.text': 'Clicca qui sotto per accedere alla dashboard.',
// Notifications
'notif.trip_invite.title': 'Invito al viaggio',
@@ -1670,8 +1670,8 @@ const it: Record<string, string | { name: string; category: string }[]> = {
'notif.action.decline': 'Rifiuta',
'notif.generic.title': 'Notifica',
'notif.generic.text': 'Hai una nuova notifica',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] Evento sconosciuto',
'notif.dev.unknown_event.text': 'Il tipo di evento "{event}" non è registrato in EVENT_NOTIFICATION_CONFIG',
}
export default it

View File

@@ -492,8 +492,8 @@ const nl: Record<string, string> = {
'admin.addons.catalog.memories.description': 'Deel reisfoto\'s via je Immich-instantie',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'Model Context Protocol voor AI-assistent integratie',
'admin.addons.catalog.packing.name': 'Lists',
'admin.addons.catalog.packing.description': 'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.packing.name': 'Lijsten',
'admin.addons.catalog.packing.description': 'Paklijsten en to-dotaken voor je reizen',
'admin.addons.catalog.budget.name': 'Budget',
'admin.addons.catalog.budget.description': 'Houd uitgaven bij en plan je reisbudget',
'admin.addons.catalog.documents.name': 'Documenten',
@@ -740,8 +740,8 @@ const nl: Record<string, string> = {
'trip.tabs.reservationsShort': 'Boek',
'trip.tabs.packing': 'Paklijst',
'trip.tabs.packingShort': 'Inpakken',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.lists': 'Lijsten',
'trip.tabs.listsShort': 'Lijsten',
'trip.tabs.budget': 'Budget',
'trip.tabs.files': 'Bestanden',
'trip.loading': 'Reis laden...',
@@ -936,11 +936,11 @@ const nl: Record<string, string> = {
'reservations.linkAssignment': 'Koppelen aan dagtoewijzing',
'reservations.pickAssignment': 'Selecteer een toewijzing uit je plan...',
'reservations.noAssignment': 'Geen koppeling (zelfstandig)',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'reservations.budgetHint': 'A budget entry will be created automatically when saving.',
'reservations.price': 'Prijs',
'reservations.budgetCategory': 'Budgetcategorie',
'reservations.budgetCategoryPlaceholder': 'bijv. Transport, Accommodatie',
'reservations.budgetCategoryAuto': 'Automatisch (op basis van boekingstype)',
'reservations.budgetHint': 'Er wordt automatisch een budgetpost aangemaakt bij het opslaan.',
'reservations.departureDate': 'Vertrek',
'reservations.arrivalDate': 'Aankomst',
'reservations.departureTime': 'Vertrektijd',
@@ -1406,7 +1406,7 @@ const nl: Record<string, string> = {
// Collab Addon
'collab.tabs.chat': 'Chat',
'collab.tabs.notes': 'Notities',
'collab.tabs.polls': 'Polls',
'collab.tabs.polls': 'Peilingen',
'collab.whatsNext.title': 'Wat komt er',
'collab.whatsNext.today': 'Vandaag',
'collab.whatsNext.tomorrow': 'Morgen',
@@ -1452,7 +1452,7 @@ const nl: Record<string, string> = {
'collab.notes.attachFiles': 'Bestanden bijvoegen',
'collab.notes.noCategoriesYet': 'Nog geen categorieën',
'collab.notes.emptyDesc': 'Maak een notitie om te beginnen',
'collab.polls.title': 'Polls',
'collab.polls.title': 'Peilingen',
'collab.polls.new': 'Nieuwe poll',
'collab.polls.empty': 'Nog geen polls',
'collab.polls.emptyHint': 'Stel de groep een vraag en stem samen',
@@ -1572,42 +1572,42 @@ const nl: Record<string, string> = {
'notifications.test.tripText': 'Testmelding voor reis "{trip}".',
// Todo
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.subtab.packing': 'Paklijst',
'todo.subtab.todo': 'Taken',
'todo.completed': 'voltooid',
'todo.filter.all': 'Alles',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task...',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.detail.create': 'Create task',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.sortByPrio': 'Priority',
'todo.filter.done': 'Klaar',
'todo.uncategorized': 'Zonder categorie',
'todo.namePlaceholder': 'Taaknaam',
'todo.descriptionPlaceholder': 'Beschrijving (optioneel)',
'todo.unassigned': 'Niet toegewezen',
'todo.noCategory': 'Geen categorie',
'todo.hasDescription': 'Heeft beschrijving',
'todo.addItem': 'Nieuwe taak toevoegen...',
'todo.newCategory': 'Categorienaam',
'todo.addCategory': 'Categorie toevoegen',
'todo.newItem': 'Nieuwe taak',
'todo.empty': 'Nog geen taken. Voeg een taak toe om te beginnen!',
'todo.filter.my': 'Mijn taken',
'todo.filter.overdue': 'Verlopen',
'todo.sidebar.tasks': 'Taken',
'todo.sidebar.categories': 'Categorieën',
'todo.detail.title': 'Taak',
'todo.detail.description': 'Beschrijving',
'todo.detail.category': 'Categorie',
'todo.detail.dueDate': 'Vervaldatum',
'todo.detail.assignedTo': 'Toegewezen aan',
'todo.detail.delete': 'Verwijderen',
'todo.detail.save': 'Wijzigingen opslaan',
'todo.detail.create': 'Taak aanmaken',
'todo.detail.priority': 'Prioriteit',
'todo.detail.noPriority': 'Geen',
'todo.sortByPrio': 'Prioriteit',
// Notification system (added from feat/notification-system)
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notifyVersionAvailable': 'Nieuwe versie beschikbaar',
'settings.notificationPreferences.noChannels': 'Er zijn geen meldingskanalen geconfigureerd. Vraag een beheerder om e-mail- of webhookmeldingen in te stellen.',
'settings.webhookUrl.label': 'Webhook-URL',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Voer je Discord-, Slack- of aangepaste webhook-URL in om meldingen te ontvangen.',
@@ -1622,7 +1622,7 @@ const nl: Record<string, string> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': 'In-app-meldingen zijn altijd actief en kunnen niet globaal worden uitgeschakeld.',
'admin.notifications.adminWebhookPanel.title': 'Admin-webhook',
'admin.notifications.adminWebhookPanel.hint': 'Deze webhook wordt uitsluitend gebruikt voor admin-meldingen (bijv. versie-updates). Hij staat los van gebruikerswebhooks en verstuurt automatisch als er een URL is ingesteld.',
'admin.notifications.adminWebhookPanel.saved': 'Admin-webhook-URL opgeslagen',
@@ -1630,16 +1630,16 @@ const nl: Record<string, string> = {
'admin.notifications.adminWebhookPanel.testFailed': 'Test-webhook mislukt',
'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': 'Notifications',
'admin.tabs.notifications': 'Meldingen',
'admin.tabs.notificationChannels': 'Meldingskanalen',
'admin.tabs.adminNotifications': 'Admin-meldingen',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notifications.versionAvailable.title': 'Update beschikbaar',
'notifications.versionAvailable.text': 'TREK {version} is nu beschikbaar.',
'notifications.versionAvailable.button': 'Details bekijken',
'notif.test.title': '[Test] Melding',
'notif.test.simple.text': 'Dit is een eenvoudige testmelding.',
'notif.test.boolean.text': 'Accepteer je deze testmelding?',
'notif.test.navigate.text': 'Klik hieronder om naar het dashboard te gaan.',
// Notifications
'notif.trip_invite.title': 'Reisuitnodiging',
@@ -1669,8 +1669,8 @@ const nl: Record<string, string> = {
'notif.action.decline': 'Weigeren',
'notif.generic.title': 'Melding',
'notif.generic.text': 'Je hebt een nieuwe melding',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] Onbekende gebeurtenis',
'notif.dev.unknown_event.text': 'Gebeurtenistype "{event}" is niet geregistreerd in EVENT_NOTIFICATION_CONFIG',
}
export default nl

View File

@@ -149,7 +149,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'settings.notifyCollabMessage': 'Wiadomości czatu (Collab)',
'settings.notifyPackingTagged': 'Lista pakowania: przypisania',
'settings.notifyWebhook': 'Powiadomienia Webhook',
'settings.notifyVersionAvailable': 'New version available',
'settings.notifyVersionAvailable': 'Nowa wersja dostępna',
'admin.smtp.title': 'E-maile i powiadomienia',
'admin.smtp.hint': 'Konfiguracja SMTP dla powiadomień e-mail. Opcjonalnie: URL Webhooka dla Discorda, Slacka, itp.',
'admin.smtp.testButton': 'Wyślij testowego e-maila',
@@ -350,7 +350,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'admin.tabs.users': 'Użytkownicy',
'admin.tabs.categories': 'Kategorie',
'admin.tabs.backup': 'Backupy',
'admin.tabs.notifications': 'Notifications',
'admin.tabs.notifications': 'Powiadomienia',
'admin.tabs.notificationChannels': 'Kanały powiadomień',
'admin.tabs.adminNotifications': 'Powiadomienia admina',
'admin.tabs.audit': 'Aktywność',
@@ -459,8 +459,8 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'admin.tabs.addons': 'Dodatki',
'admin.addons.title': 'Dodatki',
'admin.addons.subtitle': 'Włączaj lub wyłączaj funkcje, aby dostosować swoje doświadczenie w TREK.',
'admin.addons.catalog.packing.name': 'Lists',
'admin.addons.catalog.packing.description': 'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.packing.name': 'Listy',
'admin.addons.catalog.packing.description': 'Listy pakowania i zadania do wykonania dla Twoich podróży',
'admin.addons.catalog.budget.name': 'Budżet',
'admin.addons.catalog.budget.description': 'Śledź wydatki i planuj budżet podróży',
'admin.addons.catalog.documents.name': 'Dokumenty',
@@ -476,7 +476,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'Model Context Protocol dla integracji asystenta AI',
'admin.addons.subtitleBefore': 'Włączaj lub wyłączaj funkcje, aby dostosować swoje doświadczenie w ',
'admin.addons.subtitleAfter': '',
'admin.addons.subtitleAfter': '.',
'admin.addons.enabled': 'Włączone',
'admin.addons.disabled': 'Wyłączone',
'admin.addons.type.trip': 'Podróż',
@@ -707,8 +707,8 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'trip.tabs.reservationsShort': 'Rezerwacje',
'trip.tabs.packing': 'Lista pakowania',
'trip.tabs.packingShort': 'Pakowanie',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.lists': 'Listy',
'trip.tabs.listsShort': 'Listy',
'trip.tabs.budget': 'Budżet',
'trip.tabs.files': 'Pliki',
'trip.loading': 'Ładowanie podróży...',
@@ -896,11 +896,11 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'reservations.linkAssignment': 'Przypisz do miejsca',
'reservations.pickAssignment': 'Wybierz miejsce z planu...',
'reservations.noAssignment': 'Brak przypisania (samodzielna)',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'reservations.budgetHint': 'A budget entry will be created automatically when saving.',
'reservations.price': 'Cena',
'reservations.budgetCategory': 'Kategoria budżetu',
'reservations.budgetCategoryPlaceholder': 'np. Transport, Zakwaterowanie',
'reservations.budgetCategoryAuto': 'Auto (na podstawie typu rezerwacji)',
'reservations.budgetHint': 'Wpis budżetowy zostanie automatycznie utworzony podczas zapisywania.',
'reservations.departureDate': 'Wylot',
'reservations.arrivalDate': 'Przylot',
'reservations.departureTime': 'Godz. wylotu',
@@ -1452,7 +1452,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': 'Powiadomienia w aplikacji są zawsze aktywne i nie można ich globalnie wyłączyć.',
'admin.notifications.adminWebhookPanel.title': 'Webhook admina',
'admin.notifications.adminWebhookPanel.hint': 'Ten webhook służy wyłącznie do powiadomień admina (np. alertów o nowych wersjach). Jest niezależny od webhooków użytkowników i wysyła automatycznie, gdy URL jest skonfigurowany.',
'admin.notifications.adminWebhookPanel.saved': 'URL webhooka admina zapisany',
@@ -1462,7 +1462,7 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'admin.notifications.adminNotificationsHint': 'Skonfiguruj, które kanały dostarczają powiadomienia admina (np. alerty o wersjach). Webhook wysyła automatycznie, gdy ustawiony jest URL webhooka admina.',
'admin.webhook.hint': 'Pozwól użytkownikom konfigurować własne adresy URL webhooka dla powiadomień (Discord, Slack itp.).',
'settings.notificationsDisabled': 'Powiadomienia nie są skonfigurowane.',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notificationPreferences.noChannels': 'Brak skonfigurowanych kanałów powiadomień. Poproś administratora o skonfigurowanie powiadomi e-mail lub webhook.',
'settings.webhookUrl.label': 'URL webhooka',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Wprowadź adres URL webhooka Discord, Slack lub własnego, aby otrzymywać powiadomienia.',
@@ -1570,16 +1570,16 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'notifications.deleteAll': 'Usuń wszystkie',
'notifications.showAll': 'Pokaż wszystkie',
'notifications.empty': 'Brak powiadomień',
'notifications.emptyDescription': "You're all caught up!",
'notifications.emptyDescription': 'Jesteś na bieżąco!',
'notifications.all': 'Wszystkie',
'notifications.unreadOnly': 'Nieprzeczytane',
'notifications.markRead': 'Oznacz jako przeczytane',
'notifications.markUnread': 'Oznacz jako nieprzeczytane',
'notifications.delete': 'Usuń',
'notifications.system': 'System',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notifications.versionAvailable.title': 'Dostępna aktualizacja',
'notifications.versionAvailable.text': 'TREK {version} jest już dostępny.',
'notifications.versionAvailable.button': 'Zobacz szczegóły',
'notifications.test.title': 'Testowe powiadomienie od {actor}',
'notifications.test.text': 'To jest powiadomienie testowe.',
'notifications.test.booleanTitle': '{actor} prosi o akceptację',
@@ -1595,44 +1595,44 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'notifications.test.tripText': 'Testowe powiadomienie dla podróży "{trip}".',
// Todo
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task...',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.detail.create': 'Create task',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.sortByPrio': 'Priority',
'todo.subtab.packing': 'Lista pakowania',
'todo.subtab.todo': 'Do zrobienia',
'todo.completed': 'ukończono',
'todo.filter.all': 'Wszystkie',
'todo.filter.open': 'Otwarte',
'todo.filter.done': 'Gotowe',
'todo.uncategorized': 'Bez kategorii',
'todo.namePlaceholder': 'Nazwa zadania',
'todo.descriptionPlaceholder': 'Opis (opcjonalnie)',
'todo.unassigned': 'Nieprzypisane',
'todo.noCategory': 'Brak kategorii',
'todo.hasDescription': 'Ma opis',
'todo.addItem': 'Dodaj nowe zadanie...',
'todo.newCategory': 'Nazwa kategorii',
'todo.addCategory': 'Dodaj kategor',
'todo.newItem': 'Nowe zadanie',
'todo.empty': 'Brak zadań. Dodaj zadanie, aby zacząć!',
'todo.filter.my': 'Moje zadania',
'todo.filter.overdue': 'Przeterminowane',
'todo.sidebar.tasks': 'Zadania',
'todo.sidebar.categories': 'Kategorie',
'todo.detail.title': 'Zadanie',
'todo.detail.description': 'Opis',
'todo.detail.category': 'Kategoria',
'todo.detail.dueDate': 'Termin',
'todo.detail.assignedTo': 'Przypisano do',
'todo.detail.delete': 'Usuń',
'todo.detail.save': 'Zapisz zmiany',
'todo.detail.create': 'Utwórz zadanie',
'todo.detail.priority': 'Priorytet',
'todo.detail.noPriority': 'Brak',
'todo.sortByPrio': 'Priorytet',
// Notifications — dev test events
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notif.test.title': '[Test] Powiadomienie',
'notif.test.simple.text': 'To jest proste powiadomienie testowe.',
'notif.test.boolean.text': 'Czy akceptujesz to powiadomienie testowe?',
'notif.test.navigate.text': 'Kliknij poniżej, aby przejść do pulpitu.',
// Notifications
'notif.trip_invite.title': 'Zaproszenie do podróży',
@@ -1662,8 +1662,8 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'notif.action.decline': 'Odrzuć',
'notif.generic.title': 'Powiadomienie',
'notif.generic.text': 'Masz nowe powiadomienie',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] Nieznane zdarzenie',
'notif.dev.unknown_event.text': 'Typ zdarzenia "{event}" nie jest zarejestrowany w EVENT_NOTIFICATION_CONFIG',
}
export default pl

View File

@@ -492,8 +492,8 @@ const ru: Record<string, string> = {
'admin.addons.catalog.memories.description': 'Делитесь фотографиями из поездок через Immich',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'Протокол контекста модели для интеграции с ИИ-ассистентами',
'admin.addons.catalog.packing.name': 'Lists',
'admin.addons.catalog.packing.description': 'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.packing.name': 'Списки',
'admin.addons.catalog.packing.description': 'Списки вещей и задачи для ваших поездок',
'admin.addons.catalog.budget.name': 'Бюджет',
'admin.addons.catalog.budget.description': 'Отслеживайте расходы и планируйте бюджет поездки',
'admin.addons.catalog.documents.name': 'Документы',
@@ -740,8 +740,8 @@ const ru: Record<string, string> = {
'trip.tabs.reservationsShort': 'Брони',
'trip.tabs.packing': 'Список вещей',
'trip.tabs.packingShort': 'Вещи',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.lists': 'Списки',
'trip.tabs.listsShort': 'Списки',
'trip.tabs.budget': 'Бюджет',
'trip.tabs.files': 'Файлы',
'trip.loading': 'Загрузка поездки...',
@@ -936,11 +936,11 @@ const ru: Record<string, string> = {
'reservations.linkAssignment': 'Привязать к назначению дня',
'reservations.pickAssignment': 'Выберите назначение из вашего плана...',
'reservations.noAssignment': 'Без привязки (самостоятельное)',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'reservations.budgetHint': 'A budget entry will be created automatically when saving.',
'reservations.price': 'Цена',
'reservations.budgetCategory': 'Категория бюджета',
'reservations.budgetCategoryPlaceholder': 'напр. Транспорт, Проживание',
'reservations.budgetCategoryAuto': 'Авто (по типу бронирования)',
'reservations.budgetHint': 'При сохранении будет автоматически создана запись бюджета.',
'reservations.departureDate': 'Вылет',
'reservations.arrivalDate': 'Прилёт',
'reservations.departureTime': 'Время вылета',
@@ -1572,42 +1572,42 @@ const ru: Record<string, string> = {
'notifications.test.tripText': 'Тестовое уведомление для поездки "{trip}".',
// Todo
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task...',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.detail.create': 'Create task',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.sortByPrio': 'Priority',
'todo.subtab.packing': 'Список вещей',
'todo.subtab.todo': 'Задачи',
'todo.completed': 'выполнено',
'todo.filter.all': 'Все',
'todo.filter.open': 'Открытые',
'todo.filter.done': 'Выполненные',
'todo.uncategorized': 'Без категории',
'todo.namePlaceholder': 'Название задачи',
'todo.descriptionPlaceholder': 'Описание (необязательно)',
'todo.unassigned': 'Не назначено',
'todo.noCategory': 'Без категории',
'todo.hasDescription': 'Есть описание',
'todo.addItem': 'Добавить новую задачу...',
'todo.newCategory': 'Название категории',
'todo.addCategory': 'Добавить категорию',
'todo.newItem': 'Новая задача',
'todo.empty': 'Задач пока нет. Добавьте задачу, чтобы начать!',
'todo.filter.my': 'Мои задачи',
'todo.filter.overdue': 'Просроченные',
'todo.sidebar.tasks': 'Задачи',
'todo.sidebar.categories': 'Категории',
'todo.detail.title': 'Задача',
'todo.detail.description': 'Описание',
'todo.detail.category': 'Категория',
'todo.detail.dueDate': 'Срок выполнения',
'todo.detail.assignedTo': 'Назначено',
'todo.detail.delete': 'Удалить',
'todo.detail.save': 'Сохранить изменения',
'todo.detail.create': 'Создать задачу',
'todo.detail.priority': 'Приоритет',
'todo.detail.noPriority': 'Нет',
'todo.sortByPrio': 'Приоритет',
// Notification system (added from feat/notification-system)
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notifyVersionAvailable': 'Доступна новая версия',
'settings.notificationPreferences.noChannels': 'Каналы уведомлений не настроены. Попросите администратора настроить уведомления по электронной почте или через webhook.',
'settings.webhookUrl.label': 'URL вебхука',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Введите URL вашего вебхука Discord, Slack или пользовательского для получения уведомлений.',
@@ -1622,7 +1622,7 @@ const ru: Record<string, string> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': 'Уведомления в приложении всегда активны и не могут быть отключены глобально.',
'admin.notifications.adminWebhookPanel.title': 'Вебхук администратора',
'admin.notifications.adminWebhookPanel.hint': 'Этот вебхук используется исключительно для уведомлений администратора (например, оповещения о версиях). Он независим от пользовательских вебхуков и отправляется автоматически при наличии URL.',
'admin.notifications.adminWebhookPanel.saved': 'URL вебхука администратора сохранён',
@@ -1630,16 +1630,16 @@ const ru: Record<string, string> = {
'admin.notifications.adminWebhookPanel.testFailed': 'Ошибка тестового вебхука',
'admin.notifications.adminWebhookPanel.alwaysOnHint': 'Вебхук администратора отправляется автоматически при наличии URL',
'admin.notifications.adminNotificationsHint': 'Настройте, какие каналы доставляют уведомления администратора (например, оповещения о версиях). Вебхук отправляется автоматически, если задан URL вебхука администратора.',
'admin.tabs.notifications': 'Notifications',
'admin.tabs.notifications': 'Уведомления',
'admin.tabs.notificationChannels': 'Каналы уведомлений',
'admin.tabs.adminNotifications': 'Уведомления администратора',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notifications.versionAvailable.title': 'Доступно обновление',
'notifications.versionAvailable.text': 'TREK {version} теперь доступен.',
'notifications.versionAvailable.button': 'Подробнее',
'notif.test.title': '[Тест] Уведомление',
'notif.test.simple.text': 'Это простое тестовое уведомление.',
'notif.test.boolean.text': 'Вы принимаете это тестовое уведомление?',
'notif.test.navigate.text': 'Нажмите ниже для перехода на панель управления.',
// Notifications
'notif.trip_invite.title': 'Приглашение в поездку',
@@ -1669,8 +1669,8 @@ const ru: Record<string, string> = {
'notif.action.decline': 'Отклонить',
'notif.generic.title': 'Уведомление',
'notif.generic.text': 'У вас новое уведомление',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] Неизвестное событие',
'notif.dev.unknown_event.text': 'Тип события "{event}" не зарегистрирован в EVENT_NOTIFICATION_CONFIG',
}
export default ru

View File

@@ -492,8 +492,8 @@ const zh: Record<string, string> = {
'admin.addons.catalog.memories.description': '通过 Immich 实例分享旅行照片',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': '用于 AI 助手集成的模型上下文协议',
'admin.addons.catalog.packing.name': 'Lists',
'admin.addons.catalog.packing.description': 'Packing lists and to-do tasks for your trips',
'admin.addons.catalog.packing.name': '列表',
'admin.addons.catalog.packing.description': '行程打包清单与待办任务',
'admin.addons.catalog.budget.name': '预算',
'admin.addons.catalog.budget.description': '跟踪支出并规划旅行预算',
'admin.addons.catalog.documents.name': '文档',
@@ -740,8 +740,8 @@ const zh: Record<string, string> = {
'trip.tabs.reservationsShort': '预订',
'trip.tabs.packing': '行李清单',
'trip.tabs.packingShort': '行李',
'trip.tabs.lists': 'Lists',
'trip.tabs.listsShort': 'Lists',
'trip.tabs.lists': '列表',
'trip.tabs.listsShort': '列表',
'trip.tabs.budget': '预算',
'trip.tabs.files': '文件',
'trip.loading': '加载旅行中...',
@@ -936,11 +936,11 @@ const zh: Record<string, string> = {
'reservations.linkAssignment': '关联日程分配',
'reservations.pickAssignment': '从计划中选择一个分配...',
'reservations.noAssignment': '无关联(独立)',
'reservations.price': 'Price',
'reservations.budgetCategory': 'Budget category',
'reservations.budgetCategoryPlaceholder': 'e.g. Transport, Accommodation',
'reservations.budgetCategoryAuto': 'Auto (from booking type)',
'reservations.budgetHint': 'A budget entry will be created automatically when saving.',
'reservations.price': '价格',
'reservations.budgetCategory': '预算类别',
'reservations.budgetCategoryPlaceholder': '例:交通、住宿',
'reservations.budgetCategoryAuto': '自动(按预订类型)',
'reservations.budgetHint': '保存时将自动创建预算条目。',
'reservations.departureDate': '出发',
'reservations.arrivalDate': '到达',
'reservations.departureTime': '出发时间',
@@ -1572,42 +1572,42 @@ const zh: Record<string, string> = {
'notifications.test.tripText': '行程"{trip}"的测试通知。',
// Todo
'todo.subtab.packing': 'Packing List',
'todo.subtab.todo': 'To-Do',
'todo.completed': 'completed',
'todo.filter.all': 'All',
'todo.filter.open': 'Open',
'todo.filter.done': 'Done',
'todo.uncategorized': 'Uncategorized',
'todo.namePlaceholder': 'Task name',
'todo.descriptionPlaceholder': 'Description (optional)',
'todo.unassigned': 'Unassigned',
'todo.noCategory': 'No category',
'todo.hasDescription': 'Has description',
'todo.addItem': 'Add new task...',
'todo.newCategory': 'Category name',
'todo.addCategory': 'Add category',
'todo.newItem': 'New task',
'todo.empty': 'No tasks yet. Add a task to get started!',
'todo.filter.my': 'My Tasks',
'todo.filter.overdue': 'Overdue',
'todo.sidebar.tasks': 'Tasks',
'todo.sidebar.categories': 'Categories',
'todo.detail.title': 'Task',
'todo.detail.description': 'Description',
'todo.detail.category': 'Category',
'todo.detail.dueDate': 'Due date',
'todo.detail.assignedTo': 'Assigned to',
'todo.detail.delete': 'Delete',
'todo.detail.save': 'Save changes',
'todo.detail.create': 'Create task',
'todo.detail.priority': 'Priority',
'todo.detail.noPriority': 'None',
'todo.sortByPrio': 'Priority',
'todo.subtab.packing': '行李清单',
'todo.subtab.todo': '待办事项',
'todo.completed': '已完成',
'todo.filter.all': '全部',
'todo.filter.open': '进行中',
'todo.filter.done': '已完成',
'todo.uncategorized': '未分类',
'todo.namePlaceholder': '任务名称',
'todo.descriptionPlaceholder': '描述(可选)',
'todo.unassigned': '未分配',
'todo.noCategory': '无分类',
'todo.hasDescription': '有描述',
'todo.addItem': '添加新任务...',
'todo.newCategory': '分类名称',
'todo.addCategory': '添加分类',
'todo.newItem': '新任务',
'todo.empty': '暂无任务,添加一个任务开始吧!',
'todo.filter.my': '我的任务',
'todo.filter.overdue': '已逾期',
'todo.sidebar.tasks': '任务',
'todo.sidebar.categories': '分类',
'todo.detail.title': '任务',
'todo.detail.description': '描述',
'todo.detail.category': '分类',
'todo.detail.dueDate': '截止日期',
'todo.detail.assignedTo': '分配给',
'todo.detail.delete': '删除',
'todo.detail.save': '保存更改',
'todo.detail.create': '创建任务',
'todo.detail.priority': '优先级',
'todo.detail.noPriority': '',
'todo.sortByPrio': '优先级',
// Notification system (added from feat/notification-system)
'settings.notifyVersionAvailable': 'New version available',
'settings.notificationPreferences.noChannels': 'No notification channels are configured. Ask an admin to set up email or webhook notifications.',
'settings.notifyVersionAvailable': '有新版本可用',
'settings.notificationPreferences.noChannels': '未配置通知渠道。请联系管理员设置电子邮件或 Webhook 通知。',
'settings.webhookUrl.label': 'Webhook URL',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': '输入您的 Discord、Slack 或自定义 Webhook URL 以接收通知。',
@@ -1622,7 +1622,7 @@ const zh: Record<string, string> = {
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint': 'In-app notifications are always active and cannot be disabled globally.',
'admin.notifications.inappPanel.hint': '应用内通知始终处于活跃状态,无法全局禁用。',
'admin.notifications.adminWebhookPanel.title': '管理员 Webhook',
'admin.notifications.adminWebhookPanel.hint': '此 Webhook 专用于管理员通知(如版本更新提醒)。它与用户 Webhook 相互独立,配置 URL 后自动触发。',
'admin.notifications.adminWebhookPanel.saved': '管理员 Webhook URL 已保存',
@@ -1630,16 +1630,16 @@ const zh: Record<string, string> = {
'admin.notifications.adminWebhookPanel.testFailed': '测试 Webhook 失败',
'admin.notifications.adminWebhookPanel.alwaysOnHint': '配置 URL 后管理员 Webhook 自动触发',
'admin.notifications.adminNotificationsHint': '配置哪些渠道发送管理员通知(如版本更新提醒)。设置管理员 Webhook URL 后Webhook 将自动触发。',
'admin.tabs.notifications': 'Notifications',
'admin.tabs.notifications': '通知',
'admin.tabs.notificationChannels': '通知渠道',
'admin.tabs.adminNotifications': '管理员通知',
'notifications.versionAvailable.title': 'Update Available',
'notifications.versionAvailable.text': 'TREK {version} is now available.',
'notifications.versionAvailable.button': 'View Details',
'notif.test.title': '[Test] Notification',
'notif.test.simple.text': 'This is a simple test notification.',
'notif.test.boolean.text': 'Do you accept this test notification?',
'notif.test.navigate.text': 'Click below to navigate to the dashboard.',
'notifications.versionAvailable.title': '有可用更新',
'notifications.versionAvailable.text': 'TREK {version} 现已可用。',
'notifications.versionAvailable.button': '查看详情',
'notif.test.title': '[测试] 通知',
'notif.test.simple.text': '这是一条简单的测试通知。',
'notif.test.boolean.text': '您是否接受此测试通知?',
'notif.test.navigate.text': '点击下方前往控制台。',
// Notifications
'notif.trip_invite.title': '旅行邀请',
@@ -1669,8 +1669,8 @@ const zh: Record<string, string> = {
'notif.action.decline': '拒绝',
'notif.generic.title': '通知',
'notif.generic.text': '您有一条新通知',
'notif.dev.unknown_event.title': '[DEV] Unknown Event',
'notif.dev.unknown_event.text': 'Event type "{event}" is not registered in EVENT_NOTIFICATION_CONFIG',
'notif.dev.unknown_event.title': '[DEV] 未知事件',
'notif.dev.unknown_event.text': '事件类型 "{event}" 未在 EVENT_NOTIFICATION_CONFIG 中注册',
}
export default zh