diff --git a/client/src/i18n/TranslationContext.tsx b/client/src/i18n/TranslationContext.tsx index 0bf408e..f9ef45e 100644 --- a/client/src/i18n/TranslationContext.tsx +++ b/client/src/i18n/TranslationContext.tsx @@ -4,6 +4,8 @@ import de from './translations/de' import en from './translations/en' import es from './translations/es' import fr from './translations/fr' +import hu from './translations/hu' +import it from './translations/it' import ru from './translations/ru' import zh from './translations/zh' import nl from './translations/nl' @@ -18,16 +20,18 @@ export const SUPPORTED_LANGUAGES = [ { value: 'en', label: 'English' }, { value: 'es', label: 'Español' }, { value: 'fr', label: 'Français' }, + { value: 'hu', label: 'Magyar' }, { value: 'nl', label: 'Nederlands' }, { value: 'br', label: 'Português (Brasil)' }, { value: 'cs', label: 'Česky' }, { value: 'ru', label: 'Русский' }, { value: 'zh', label: '中文' }, + { value: 'it', label: 'Italiano' }, { value: 'ar', label: 'العربية' }, ] as const -const translations: Record = { de, en, es, fr, ru, zh, nl, ar, br, cs } -const LOCALES: Record = { de: 'de-DE', en: 'en-US', es: 'es-ES', fr: 'fr-FR', ru: 'ru-RU', zh: 'zh-CN', nl: 'nl-NL', ar: 'ar-SA', br: 'pt-BR', cs: 'cs-CZ' } +const translations: Record = { de, en, es, fr, hu, it, ru, zh, nl, ar, br, cs } +const LOCALES: Record = { de: 'de-DE', en: 'en-US', es: 'es-ES', fr: 'fr-FR', hu: 'hu-HU', it: 'it-IT', ru: 'ru-RU', zh: 'zh-CN', nl: 'nl-NL', ar: 'ar-SA', br: 'pt-BR', cs: 'cs-CZ' } const RTL_LANGUAGES = new Set(['ar']) export function getLocaleForLanguage(language: string): string { @@ -36,7 +40,7 @@ export function getLocaleForLanguage(language: string): string { export function getIntlLanguage(language: string): string { if (language === 'br') return 'pt-BR' - return ['de', 'es', 'fr', 'ru', 'zh', 'nl', 'ar', 'cs'].includes(language) ? language : 'en' + return ['de', 'es', 'fr', 'hu', 'it', 'ru', 'zh', 'nl', 'ar', 'cs'].includes(language) ? language : 'en' } export function isRtlLanguage(language: string): boolean { diff --git a/client/src/i18n/translations/br.ts b/client/src/i18n/translations/br.ts index 48d4394..dab6913 100644 --- a/client/src/i18n/translations/br.ts +++ b/client/src/i18n/translations/br.ts @@ -455,6 +455,20 @@ const br: Record = { 'admin.weather.requestsDesc': 'Grátis, sem chave de API', 'admin.weather.locationHint': 'O clima usa o primeiro lugar com coordenadas de cada dia. Se nenhum lugar estiver atribuído ao dia, qualquer lugar da lista serve como referência.', + 'admin.tabs.audit': 'Log de auditoria', + + 'admin.audit.subtitle': 'Eventos sensíveis de segurança e administração (backups, usuários, 2FA, configurações).', + 'admin.audit.empty': 'Nenhum registro de auditoria.', + 'admin.audit.refresh': 'Atualizar', + 'admin.audit.loadMore': 'Carregar mais', + 'admin.audit.showing': '{count} carregados · {total} no total', + 'admin.audit.col.time': 'Hora', + 'admin.audit.col.user': 'Usuário', + 'admin.audit.col.action': 'Ação', + 'admin.audit.col.resource': 'Recurso', + 'admin.audit.col.ip': 'IP', + 'admin.audit.col.details': 'Detalhes', + // GitHub 'admin.tabs.github': 'GitHub', 'admin.github.title': 'Histórico de versões', diff --git a/client/src/i18n/translations/cs.ts b/client/src/i18n/translations/cs.ts index a470c36..daefce0 100644 --- a/client/src/i18n/translations/cs.ts +++ b/client/src/i18n/translations/cs.ts @@ -17,7 +17,7 @@ const cs: Record = { 'common.ok': 'OK', 'common.yes': 'Ano', 'common.no': 'Ne', - 'common.nebo': 'nebo', + 'common.or': 'nebo', 'common.none': 'Žádné', 'common.date': 'Datum', 'common.rename': 'Přejmenovat', @@ -46,7 +46,7 @@ const cs: Record = { // Přehled (Dashboard) 'dashboard.title': 'Moje cesty', 'dashboard.subtitle.loading': 'Načítání cest...', - 'dashboard.subtitle.cest': '{count} cest ({archived} archivováno)', + 'dashboard.subtitle.trips': '{count} cest ({archived} archivováno)', 'dashboard.subtitle.empty': 'Začněte svou první cestu', 'dashboard.subtitle.activeOne': '{count} aktivní cesta', 'dashboard.subtitle.activeMany': '{count} aktivních cest', @@ -140,6 +140,16 @@ const cs: Record = { 'settings.temperature': 'Jednotky teploty', 'settings.timeFormat': 'Formát času', 'settings.routeCalculation': 'Výpočet trasy', + 'settings.blurBookingCodes': 'Skrýt rezervační kódy', + 'settings.notifications': 'Oznámení', + 'settings.notifyTripInvite': 'Pozvánky na cesty', + 'settings.notifyBookingChange': 'Změny rezervací', + 'settings.notifyTripReminder': 'Připomínky cest', + 'settings.notifyVacayInvite': 'Pozvánky k propojení Vacay', + 'settings.notifyPhotosShared': 'Sdílené fotky (Immich)', + 'settings.notifyCollabMessage': 'Zprávy v chatu (Collab)', + 'settings.notifyPackingTagged': 'Seznam balení: přiřazení', + 'settings.notifyWebhook': 'Webhook oznámení', 'settings.on': 'Zapnuto', 'settings.off': 'Vypnuto', 'settings.account': 'Účet', @@ -192,6 +202,40 @@ const cs: Record = { 'settings.mfa.toastEnabled': 'Dvoufaktorové ověření bylo zapnuto', 'settings.mfa.toastDisabled': 'Dvoufaktorové ověření bylo vypnuto', 'settings.mfa.demoBlocked': 'Není k dispozici v demo režimu', + 'admin.smtp.title': 'E-mail a oznámení', + 'admin.smtp.hint': 'Konfigurace SMTP pro e-mailová oznámení. Volitelně: Webhook URL pro Discord, Slack apod.', + 'admin.smtp.testButton': 'Odeslat testovací e-mail', + 'admin.smtp.testSuccess': 'Testovací e-mail byl úspěšně odeslán', + 'admin.smtp.testFailed': 'Odeslání testovacího e-mailu se nezdařilo', + 'dayplan.icsTooltip': 'Exportovat kalendář (ICS)', + 'share.linkTitle': 'Veřejný odkaz', + 'share.linkHint': 'Vytvořte odkaz, kterým si může kdokoli prohlédnout tuto cestu bez přihlášení. Pouze pro čtení — úpravy nejsou možné.', + 'share.createLink': 'Vytvořit odkaz', + 'share.deleteLink': 'Smazat odkaz', + 'share.createError': 'Nepodařilo se vytvořit odkaz', + 'common.copy': 'Kopírovat', + 'common.copied': 'Zkopírováno', + 'share.permMap': 'Mapa a plán', + 'share.permBookings': 'Rezervace', + 'share.permPacking': 'Balení', + 'shared.expired': 'Odkaz vypršel nebo je neplatný', + 'shared.expiredHint': 'Tento sdílený odkaz na cestu již není aktivní.', + 'shared.readOnly': 'Sdílené zobrazení – pouze pro čtení', + 'shared.tabPlan': 'Plán', + 'shared.tabBookings': 'Rezervace', + 'shared.tabPacking': 'Balení', + 'shared.tabBudget': 'Rozpočet', + 'shared.tabChat': 'Chat', + 'shared.days': 'dní', + 'shared.places': 'míst', + 'shared.other': 'Ostatní', + 'shared.totalBudget': 'Celkový rozpočet', + 'shared.messages': 'zpráv', + 'shared.sharedVia': 'Sdíleno přes', + 'shared.confirmed': 'Potvrzeno', + 'shared.pending': 'Čeká na potvrzení', + 'share.permBudget': 'Rozpočet', + 'share.permCollab': 'Chat', // Přihlášení (Login) 'login.error': 'Přihlášení se nezdařilo. Zkontrolujte prosím své údaje.', @@ -273,7 +317,7 @@ const cs: Record = { 'admin.tabs.categories': 'Kategorie', 'admin.tabs.backup': 'Zálohování', 'admin.stats.users': 'Uživatelé', - 'admin.stats.cest': 'Cesty', + 'admin.stats.trips': 'Cesty', 'admin.stats.places': 'Místa', 'admin.stats.photos': 'Fotky', 'admin.stats.files': 'Soubory', @@ -398,6 +442,38 @@ const cs: Record = { 'admin.addons.toast.updated': 'Doplněk byl aktualizován', 'admin.addons.toast.error': 'Aktualizace doplňku se nezdařila', 'admin.addons.noAddons': 'Žádné doplňky nejsou k dispozici', + 'admin.addons.catalog.memories.name': 'Fotky (Immich)', + 'admin.addons.catalog.memories.description': 'Sdílejte cestovní fotky přes vaši instanci Immich', + 'admin.addons.subtitleBefore': 'Zapněte nebo vypněte funkce a přizpůsobte si ', + 'admin.addons.subtitleAfter': '.', + + 'admin.tabs.audit': 'Auditní protokol', + + 'admin.audit.subtitle': 'Bezpečnostní a administrátorské události (zálohy, uživatelé, 2FA, nastavení).', + 'admin.audit.empty': 'Zatím žádné záznamy auditu.', + 'admin.audit.refresh': 'Obnovit', + 'admin.audit.loadMore': 'Načíst další', + 'admin.audit.showing': '{count} načteno · {total} celkem', + 'admin.audit.col.time': 'Čas', + 'admin.audit.col.user': 'Uživatel', + 'admin.audit.col.action': 'Akce', + 'admin.audit.col.resource': 'Zdroj', + 'admin.audit.col.ip': 'IP', + 'admin.audit.col.details': 'Detaily', + + // GitHub + 'admin.tabs.github': 'GitHub', + 'admin.github.title': 'Historie verzí', + 'admin.github.subtitle': 'Nejnovější aktualizace z {repo}', + 'admin.github.latest': 'Nejnovější', + 'admin.github.prerelease': 'Předběžná verze', + 'admin.github.showDetails': 'Zobrazit podrobnosti', + 'admin.github.hideDetails': 'Skrýt podrobnosti', + 'admin.github.loadMore': 'Načíst další', + 'admin.github.loading': 'Načítání...', + 'admin.github.error': 'Nepodařilo se načíst verze', + 'admin.github.by': 'od', + 'admin.github.support': 'Pomáhá udržovat vývoj TREK', // Počasí (Weather) 'admin.weather.title': 'Data o počasí', @@ -428,6 +504,7 @@ const cs: Record = { 'admin.update.backupLink': 'Přejít na zálohování', 'admin.update.howTo': 'Jak aktualizovat', 'admin.update.dockerText': 'Váš TREK běží v Dockeru. Pro aktualizaci na verzi {version} spusťte na svém serveru tyto příkazy:', + 'admin.update.reloadHint': 'Prosím obnovte stránku za několik sekund.', // Vacay doplněk 'vacay.subtitle': 'Plánování a správa dovolené', @@ -444,6 +521,7 @@ const cs: Record = { 'vacay.editPerson': 'Upravit osobu', 'vacay.removePerson': 'Odebrat osobu', 'vacay.removePersonConfirm': 'Odebrat osobu {name}?', + 'vacay.removePersonHint': 'Všechny záznamy dovolené pro tuto osobu budou trvale smazány.', 'vacay.personName': 'Jméno', 'vacay.personNamePlaceholder': 'Zadejte jméno', 'vacay.color': 'Barva', @@ -468,17 +546,24 @@ const cs: Record = { 'vacay.fri': 'Pá', 'vacay.sat': 'So', 'vacay.sun': 'Ne', + 'vacay.weekendDays': 'Víkendové dny', 'vacay.publicHolidays': 'Státní svátky', 'vacay.publicHolidaysHint': 'Zobrazit státní svátky v kalendáři', 'vacay.selectCountry': 'Vyberte zemi', 'vacay.selectRegion': 'Vyberte region (volitelné)', 'vacay.addCalendar': 'Přidat kalendář', + 'vacay.calendarLabel': 'Popisek (volitelné)', + 'vacay.calendarColor': 'Barva', 'vacay.noCalendars': 'Zatím nebyly přidány žádné svátkové kalendáře', 'vacay.companyHolidays': 'Firemní volno', + 'vacay.companyHolidaysHint': 'Povolit označování dnů celofiremního volna', + 'vacay.companyHolidaysNoDeduct': 'Firemní volno se nezapočítává do nároku na dovolenou.', 'vacay.carryOver': 'Převod dovolené', 'vacay.carryOverHint': 'Automaticky převádět zbývající dny do dalšího roku', 'vacay.sharing': 'Sdílení', + 'vacay.sharingHint': 'Sdílejte svůj plán dovolené s ostatními uživateli TREK', 'vacay.owner': 'Vlastník', + 'vacay.shareEmailPlaceholder': 'E-mail uživatele TREK', 'vacay.shareSuccess': 'Plán byl úspěšně sdílen', 'vacay.shareError': 'Nepodařilo se sdílet plán', 'vacay.dissolve': 'Zrušit propojení', @@ -496,6 +581,7 @@ const cs: Record = { 'vacay.inviteSent': 'Pozvánka odeslána', 'vacay.inviteError': 'Nepodařilo se odeslat pozvánku', 'vacay.pending': 'čeká na vyřízení', + 'vacay.noUsersAvailable': 'Žádní uživatelé nejsou k dispozici', 'vacay.accept': 'Přijmout', 'vacay.decline': 'Odmítnout', 'vacay.acceptFusion': 'Přijmout a propojit', @@ -510,7 +596,7 @@ const cs: Record = { // Atlas doplněk 'atlas.subtitle': 'Vaše stopa ve světě', 'atlas.countries': 'Země', - 'atlas.cest': 'Cesty', + 'atlas.trips': 'Cesty', 'atlas.places': 'Místa', 'atlas.unmark': 'Odebrat', 'atlas.confirmMark': 'Označit tuto zemi jako navštívenou?', @@ -518,6 +604,9 @@ const cs: Record = { 'atlas.markVisited': 'Označit jako navštívené', 'atlas.markVisitedHint': 'Přidat tuto zemi do seznamu navštívených', 'atlas.addToBucket': 'Přidat do seznamu přání (Bucket list)', + 'atlas.addPoi': 'Přidat místo', + 'atlas.bucketNamePlaceholder': 'Název (země, město, místo...)', + 'atlas.month': 'Měsíc', 'atlas.addToBucketHint': 'Uložit jako místo, které chcete navštívit', 'atlas.bucketWhen': 'Kdy plánujete návštěvu?', 'atlas.statsTab': 'Statistiky', @@ -603,14 +692,26 @@ const cs: Record = { 'dayplan.pdf': 'PDF', 'dayplan.pdfTooltip': 'Exportovat denní plán do PDF', 'dayplan.pdfError': 'Export do PDF se nezdařil', + 'dayplan.cannotReorderTransport': 'Rezervace s pevným časem nelze přeuspořádat', + 'dayplan.confirmRemoveTimeTitle': 'Odebrat čas?', + 'dayplan.confirmRemoveTimeBody': 'Toto místo má pevný čas ({time}). Přesunutím se čas odebere a povolí se volné řazení.', + 'dayplan.confirmRemoveTimeAction': 'Odebrat čas a přesunout', + 'dayplan.cannotDropOnTimed': 'Položky nelze umístit mezi záznamy s pevným časem', + 'dayplan.cannotBreakChronology': 'Toto by porušilo chronologické pořadí naplánovaných položek a rezervací', // Boční panel míst (Places Sidebar) 'places.addPlace': 'Přidat místo/aktivitu', + 'places.importGpx': 'Importovat GPX', + 'places.gpxImported': '{count} míst importováno z GPX', + 'places.urlResolved': 'Místo importováno z URL', + 'places.gpxError': 'Import GPX se nezdařil', 'places.assignToDay': 'Přidat do kterého dne?', 'places.all': 'Vše', 'places.unplanned': 'Nezařazené', 'places.search': 'Hledat místa...', 'places.allCategories': 'Všechny kategorie', + 'places.categoriesSelected': 'kategorií', + 'places.clearFilter': 'Vymazat filtr', 'places.count': '{count} míst', 'places.countSingular': '1 místo', 'places.allPlanned': 'Všechna místa jsou naplánována', @@ -644,7 +745,41 @@ const cs: Record = { 'places.nameRequired': 'Prosím zadejte název', 'places.saveError': 'Uložení se nezdařilo', + // Inspektor míst (Place Inspector) + 'inspector.opened': 'Otevřeno', + 'inspector.closed': 'Zavřeno', + 'inspector.openingHours': 'Otevírací doba', + 'inspector.showHours': 'Zobrazit otevírací dobu', + 'inspector.files': 'Soubory', + 'inspector.filesCount': '{count} souborů', + 'inspector.removeFromDay': 'Odebrat ze dne', + 'inspector.addToDay': 'Přidat ke dni', + 'inspector.confirmedRes': 'Potvrzená rezervace', + 'inspector.pendingRes': 'Čekající rezervace', + 'inspector.google': 'Otevřít v Google Mapách', + 'inspector.website': 'Otevřít webové stránky', + 'inspector.addRes': 'Rezervace', + 'inspector.editRes': 'Upravit rezervaci', + 'inspector.participants': 'Účastníci', + // Rezervace (Reservations) + 'reservations.title': 'Rezervace', + 'reservations.empty': 'Zatím žádné rezervace', + 'reservations.emptyHint': 'Přidejte rezervace letů, hotelů a dalších', + 'reservations.add': 'Přidat rezervaci', + 'reservations.addManual': 'Ruční rezervace', + 'reservations.placeHint': 'Tip: Rezervace je nejlepší vytvářet přímo z místa – propojí se tak s denním plánem.', + 'reservations.confirmed': 'Potvrzeno', + 'reservations.pending': 'Čeká na potvrzení', + 'reservations.summary': '{confirmed} potvrzených, {pending} čekajících', + 'reservations.fromPlan': 'Z plánu', + 'reservations.showFiles': 'Zobrazit soubory', + 'reservations.editTitle': 'Upravit rezervaci', + 'reservations.status': 'Stav', + 'reservations.datetime': 'Datum a čas', + 'reservations.startTime': 'Čas začátku', + 'reservations.endTime': 'Čas konce', + 'reservations.date': 'Datum', 'reservations.time': 'Čas', 'reservations.timeAlt': 'Čas (alternativní, např. 19:30)', 'reservations.notes': 'Poznámky', @@ -675,7 +810,9 @@ const cs: Record = { 'reservations.type.event': 'Událost', 'reservations.type.tour': 'Prohlídka', 'reservations.type.other': 'Jiné', - 'reservations.confirm.delete': 'Opravdu chcete smazat rezervaci „{name}“?', + 'reservations.confirm.delete': 'Opravdu chcete smazat rezervaci „{name}”?', + 'reservations.confirm.deleteTitle': 'Smazat rezervaci?', + 'reservations.confirm.deleteBody': '„{name}” bude trvale smazána.', 'reservations.toast.updated': 'Rezervace aktualizována', 'reservations.toast.removed': 'Rezervace smazána', 'reservations.toast.fileUploaded': 'Soubor byl nahrán', @@ -699,9 +836,64 @@ const cs: Record = { 'reservations.toast.saveError': 'Uložení se nezdařilo', 'reservations.toast.updateError': 'Aktualizace se nezdařila', 'reservations.toast.deleteError': 'Smazání se nezdařilo', - 'reservations.confirm.remove': 'Odstranit rezervaci pro „{name}“?', + 'reservations.confirm.remove': 'Odstranit rezervaci pro „{name}”?', + '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é)', + + // Rozpočet (Budget) + 'budget.title': 'Rozpočet', + 'budget.emptyTitle': 'Zatím nebyl vytvořen žádný rozpočet', + 'budget.emptyText': 'Vytvořte kategorie a položky pro plánování cestovního rozpočtu', + 'budget.emptyPlaceholder': 'Zadejte název kategorie...', + 'budget.createCategory': 'Vytvořit kategorii', + 'budget.category': 'Kategorie', + 'budget.categoryName': 'Název kategorie', + 'budget.table.name': 'Název', + 'budget.table.total': 'Celkem', + 'budget.table.persons': 'Osoby', + 'budget.table.days': 'Dní', + 'budget.table.perPerson': 'Na osobu', + 'budget.table.perDay': 'Za den', + 'budget.table.perPersonDay': 'Os. / den', + 'budget.table.note': 'Poznámka', + 'budget.newEntry': 'Nová položka', + 'budget.defaultEntry': 'Nová položka', + 'budget.defaultCategory': 'Nová kategorie', + 'budget.total': 'Celkem', + 'budget.totalBudget': 'Celkový rozpočet', + 'budget.byCategory': 'Podle kategorie', + 'budget.editTooltip': 'Klikněte pro úpravu', + 'budget.confirm.deleteCategory': 'Opravdu chcete smazat kategorii „{name}” s {count} položkami?', + 'budget.deleteCategory': 'Smazat kategorii', + 'budget.perPerson': 'Na osobu', + 'budget.paid': 'Zaplaceno', + 'budget.open': 'Nezaplaceno', + 'budget.noMembers': 'Žádní členové nebyli přiřazeni', + 'budget.settlement': 'Vyúčtování', + 'budget.settlementInfo': 'Klikněte na avatar člena u rozpočtové položky pro zelené označení – to znamená, že zaplatil. Vyúčtování pak ukazuje, kdo komu a kolik dluží.', + 'budget.netBalances': 'Čisté zůstatky', // Soubory (Files) + 'files.title': 'Soubory', + 'files.count': '{count} souborů', + 'files.countSingular': '1 soubor', + 'files.uploaded': '{count} nahráno', + 'files.uploadError': 'Nahrávání se nezdařilo', + 'files.dropzone': 'Přetáhněte soubory sem', + 'files.dropzoneHint': 'nebo klikněte pro výběr', + 'files.allowedTypes': 'Obrázky, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB', + 'files.uploading': 'Nahrávání...', + 'files.filterAll': 'Vše', + 'files.filterPdf': 'PDF', + 'files.filterImages': 'Obrázky', + 'files.filterDocs': 'Dokumenty', + 'files.filterCollab': 'Poznámky spolupráce', + 'files.sourceCollab': 'Z poznámek spolupráce', + 'files.empty': 'Zatím žádné soubory', + 'files.emptyHint': 'Nahrajte soubory k vaší cestě', + 'files.openTab': 'Otevřít v nové kartě', + 'files.confirm.delete': 'Opravdu chcete smazat tento soubor?', 'files.toast.deleted': 'Soubor byl smazán', 'files.toast.deleteError': 'Nepodařilo se smazat soubor', 'files.sourcePlan': 'Denní plán', @@ -734,6 +926,15 @@ const cs: Record = { // Balení (Packing) 'packing.title': 'Seznam věcí', 'packing.empty': 'Seznam věcí je prázdný', + 'packing.import': 'Importovat', + 'packing.importTitle': 'Importovat seznam', + 'packing.importHint': 'Jedna položka na řádek. Formát: Kategorie, Název, Váha v g (volitelné), Zavazadlo (volitelné), checked/unchecked (volitelné)', + 'packing.importPlaceholder': 'Hygiena, Zubní kartáček\nOblečení, Trička, 200\nDokumenty, Pas, , Příruční zavazadlo\nElektronika, Nabíječka, 50, Kufr, checked', + 'packing.importCsv': 'Načíst CSV/TXT', + 'packing.importAction': 'Importovat {count}', + 'packing.importSuccess': '{count} položek importováno', + 'packing.importError': 'Import se nezdařil', + 'packing.importEmpty': 'Žádné položky k importu', 'packing.progress': '{packed} z {total} zabaleno ({percent} %)', 'packing.clearChecked': 'Odstranit {count} hotových', 'packing.clearCheckedShort': 'Odstranit {count}', @@ -759,8 +960,333 @@ const cs: Record = { 'packing.addItemPlaceholder': 'Název položky...', 'packing.addCategory': 'Přidat kategorii', 'packing.newCategoryPlaceholder': 'Název kategorie (např. Oblečení)', + 'packing.applyTemplate': 'Použít šablonu', + 'packing.template': 'Šablona', + 'packing.templateApplied': '{count} položek přidáno ze šablony', + 'packing.templateError': 'Šablonu se nepodařilo použít', + 'packing.bags': 'Zavazadla', + 'packing.noBag': 'Nepřiřazeno', + 'packing.totalWeight': 'Celková váha', + 'packing.bagName': 'Název zavazadla...', + 'packing.addBag': 'Přidat zavazadlo', + 'packing.changeCategory': 'Změnit kategorii', + 'packing.confirm.clearChecked': 'Opravdu chcete odstranit {count} zabalených položek?', + 'packing.confirm.deleteCat': 'Opravdu chcete smazat kategorii „{name}" s {count} položkami?', + 'packing.defaultCategory': 'Ostatní', + 'packing.toast.saveError': 'Uložení se nezdařilo', + 'packing.toast.deleteError': 'Smazání se nezdařilo', + 'packing.toast.renameError': 'Přejmenování se nezdařilo', + 'packing.toast.addError': 'Přidání se nezdařilo', - // Spolupráce (Collab / Chat) + // Návrhy balení (Packing suggestions) + 'packing.suggestions.items': [ + { name: 'Pas', category: 'Dokumenty' }, + { name: 'Občanský průkaz', category: 'Dokumenty' }, + { name: 'Cestovní pojištění', category: 'Dokumenty' }, + { name: 'Letenky', category: 'Dokumenty' }, + { name: 'Platební karta', category: 'Finance' }, + { name: 'Hotovost', category: 'Finance' }, + { name: 'Víza', category: 'Dokumenty' }, + { name: 'Trička', category: 'Oblečení' }, + { name: 'Kalhoty', category: 'Oblečení' }, + { name: 'Spodní prádlo', category: 'Oblečení' }, + { name: 'Ponožky', category: 'Oblečení' }, + { name: 'Bunda', category: 'Oblečení' }, + { name: 'Pyžamo', category: 'Oblečení' }, + { name: 'Plavky', category: 'Oblečení' }, + { name: 'Pláštěnka', category: 'Oblečení' }, + { name: 'Pohodlné boty', category: 'Oblečení' }, + { name: 'Zubní kartáček', category: 'Hygiena' }, + { name: 'Zubní pasta', category: 'Hygiena' }, + { name: 'Šampón', category: 'Hygiena' }, + { name: 'Deodorant', category: 'Hygiena' }, + { name: 'Opalovací krém', category: 'Hygiena' }, + { name: 'Holicí strojek', category: 'Hygiena' }, + { name: 'Nabíječka', category: 'Elektronika' }, + { name: 'Powerbanka', category: 'Elektronika' }, + { name: 'Sluchátka', category: 'Elektronika' }, + { name: 'Cestovní adaptér', category: 'Elektronika' }, + { name: 'Fotoaparát', category: 'Elektronika' }, + { name: 'Léky proti bolesti', category: 'Zdraví' }, + { name: 'Náplasti', category: 'Zdraví' }, + { name: 'Dezinfekce', category: 'Zdraví' }, + ], + + // Členové / Sdílení (Members) + 'members.shareTrip': 'Sdílet cestu', + 'members.inviteUser': 'Pozvat uživatele', + 'members.selectUser': 'Vyberte uživatele…', + 'members.invite': 'Pozvat', + 'members.allHaveAccess': 'Všichni uživatelé již mají přístup.', + 'members.access': 'Přístup', + 'members.person': 'osoba', + 'members.persons': 'osob', + 'members.you': 'vy', + 'members.owner': 'Vlastník', + 'members.leaveTrip': 'Opustit cestu', + 'members.removeAccess': 'Odebrat přístup', + 'members.confirmLeave': 'Opustit cestu? Ztratíte přístup.', + 'members.confirmRemove': 'Odebrat přístup tomuto uživateli?', + 'members.loadError': 'Nepodařilo se načíst členy', + 'members.added': 'přidán/a', + 'members.addError': 'Nepodařilo se přidat', + 'members.removed': 'Člen odebrán', + 'members.removeError': 'Nepodařilo se odebrat', + + // Kategorie (Admin) + 'categories.title': 'Kategorie', + 'categories.subtitle': 'Správa kategorií pro místa', + 'categories.new': 'Nová kategorie', + 'categories.empty': 'Zatím žádné kategorie', + 'categories.namePlaceholder': 'Název kategorie', + 'categories.icon': 'Ikona', + 'categories.color': 'Barva', + 'categories.customColor': 'Vybrat vlastní barvu', + 'categories.preview': 'Náhled', + 'categories.defaultName': 'Kategorie', + 'categories.update': 'Aktualizovat', + 'categories.create': 'Vytvořit', + 'categories.confirm.delete': 'Smazat kategorii? Místa v této kategorii nebudou smazána.', + 'categories.toast.loadError': 'Nepodařilo se načíst kategorie', + 'categories.toast.nameRequired': 'Prosím zadejte název', + 'categories.toast.updated': 'Kategorie aktualizována', + 'categories.toast.created': 'Kategorie vytvořena', + 'categories.toast.saveError': 'Uložení se nezdařilo', + 'categories.toast.deleted': 'Kategorie smazána', + 'categories.toast.deleteError': 'Smazání se nezdařilo', + + // Zálohování (Backup) + 'backup.title': 'Záloha dat', + 'backup.subtitle': 'Databáze a všechny nahrané soubory', + 'backup.refresh': 'Obnovit', + 'backup.upload': 'Nahrát zálohu', + 'backup.uploading': 'Nahrávání…', + 'backup.create': 'Vytvořit zálohu', + 'backup.creating': 'Vytváření…', + 'backup.empty': 'Zatím žádné zálohy', + 'backup.createFirst': 'Vytvořit první zálohu', + 'backup.download': 'Stáhnout', + 'backup.restore': 'Obnovit', + 'backup.confirm.restore': 'Obnovit zálohu „{name}"?\n\nVšechna aktuální data budou nahrazena zálohou.', + 'backup.confirm.uploadRestore': 'Nahrát a obnovit zálohu „{name}"?\n\nVšechna aktuální data budou přepsána.', + 'backup.confirm.delete': 'Smazat zálohu „{name}"?', + 'backup.toast.loadError': 'Nepodařilo se načíst zálohy', + 'backup.toast.created': 'Záloha byla úspěšně vytvořena', + 'backup.toast.createError': 'Nepodařilo se vytvořit zálohu', + 'backup.toast.restored': 'Záloha obnovena. Stránka se znovu načte…', + 'backup.toast.restoreError': 'Obnovení se nezdařilo', + 'backup.toast.uploadError': 'Nahrávání se nezdařilo', + 'backup.toast.deleted': 'Záloha smazána', + 'backup.toast.deleteError': 'Smazání se nezdařilo', + 'backup.toast.downloadError': 'Stahování se nezdařilo', + 'backup.toast.settingsSaved': 'Nastavení automatického zálohování uloženo', + 'backup.toast.settingsError': 'Nepodařilo se uložit nastavení', + 'backup.auto.title': 'Automatické zálohování', + 'backup.auto.subtitle': 'Automatické zálohování podle plánu', + 'backup.auto.enable': 'Povolit automatické zálohování', + 'backup.auto.enableHint': 'Zálohy budou vytvářeny automaticky podle zvoleného plánu', + 'backup.auto.interval': 'Interval', + 'backup.auto.hour': 'Spustit v hodinu', + 'backup.auto.hourHint': 'Místní čas serveru (formát {format})', + 'backup.auto.dayOfWeek': 'Den v týdnu', + 'backup.auto.dayOfMonth': 'Den v měsíci', + 'backup.auto.dayOfMonthHint': 'Omezeno na 1–28 pro kompatibilitu se všemi měsíci', + 'backup.auto.scheduleSummary': 'Plán', + 'backup.auto.summaryDaily': 'Každý den v {hour}:00', + 'backup.auto.summaryWeekly': 'Každý {day} v {hour}:00', + 'backup.auto.summaryMonthly': '{day}. každého měsíce v {hour}:00', + 'backup.auto.envLocked': 'Docker', + 'backup.auto.envLockedHint': 'Automatické zálohování je konfigurováno přes Docker proměnné prostředí. Pro změnu nastavení aktualizujte docker-compose.yml a restartujte kontejner.', + 'backup.auto.copyEnv': 'Zkopírovat Docker proměnné', + 'backup.auto.envCopied': 'Docker proměnné prostředí zkopírovány do schránky', + 'backup.auto.keepLabel': 'Smazat staré zálohy po', + 'backup.dow.sunday': 'Ne', + 'backup.dow.monday': 'Po', + 'backup.dow.tuesday': 'Út', + 'backup.dow.wednesday': 'St', + 'backup.dow.thursday': 'Čt', + 'backup.dow.friday': 'Pá', + 'backup.dow.saturday': 'So', + 'backup.interval.hourly': 'Každou hodinu', + 'backup.interval.daily': 'Denně', + 'backup.interval.weekly': 'Týdně', + 'backup.interval.monthly': 'Měsíčně', + 'backup.keep.1day': '1 den', + 'backup.keep.3days': '3 dny', + 'backup.keep.7days': '7 dní', + 'backup.keep.14days': '14 dní', + 'backup.keep.30days': '30 dní', + 'backup.keep.forever': 'Uchovávat navždy', + + // Fotky + 'photos.allDays': 'Všechny dny', + 'photos.noPhotos': 'Zatím žádné fotky', + 'photos.uploadHint': 'Nahrajte své cestovní fotky', + 'photos.clickToSelect': 'nebo klikněte pro výběr', + 'photos.linkPlace': 'Propojit s místem', + 'photos.noPlace': 'Žádné místo', + 'photos.uploadN': 'Nahrát {n} fotek', + + // Obnovení zálohy + 'backup.restoreConfirmTitle': 'Obnovit zálohu?', + 'backup.restoreWarning': 'Všechna aktuální data (cesty, místa, uživatelé, nahrané soubory) budou trvale nahrazena zálohou. Tuto akci nelze vrátit.', + 'backup.restoreTip': 'Tip: Před obnovením vytvořte zálohu aktuálního stavu.', + 'backup.restoreConfirm': 'Ano, obnovit', + + // PDF + 'pdf.travelPlan': 'Cestovní plán', + 'pdf.planned': 'Naplánováno', + 'pdf.costLabel': 'Náklady EUR', + 'pdf.preview': 'Náhled PDF', + 'pdf.saveAsPdf': 'Uložit jako PDF', + + // Plánovač (Planner) + 'planner.places': 'Místa', + 'planner.bookings': 'Rezervace', + 'planner.packingList': 'Seznam věcí', + 'planner.documents': 'Dokumenty', + 'planner.dayPlan': 'Denní plán', + 'planner.reservations': 'Rezervace', + 'planner.minTwoPlaces': 'Potřebujete alespoň 2 místa se souřadnicemi', + 'planner.noGeoPlaces': 'Žádná místa se souřadnicemi nejsou k dispozici', + 'planner.routeCalculated': 'Trasa vypočtena', + 'planner.routeCalcFailed': 'Trasu se nepodařilo vypočítat', + 'planner.routeError': 'Chyba při výpočtu trasy', + 'planner.routeOptimized': 'Trasa optimalizována', + 'planner.reservationUpdated': 'Rezervace aktualizována', + 'planner.reservationAdded': 'Rezervace přidána', + 'planner.confirmDeleteReservation': 'Smazat rezervaci?', + 'planner.reservationDeleted': 'Rezervace smazána', + 'planner.days': 'Dny', + 'planner.allPlaces': 'Všechna místa', + 'planner.totalPlaces': 'Celkem {n} míst', + 'planner.noDaysPlanned': 'Zatím nejsou naplánovány žádné dny', + 'planner.editTrip': 'Upravit cestu \u2192', + 'planner.placeOne': '1 místo', + 'planner.placeN': '{n} míst', + 'planner.addNote': 'Přidat poznámku', + 'planner.noEntries': 'Pro tento den nejsou žádné záznamy', + 'planner.addPlace': 'Přidat místo/aktivitu', + 'planner.addPlaceShort': '+ Přidat místo/aktivitu', + 'planner.resPending': 'Rezervace čeká · ', + 'planner.resConfirmed': 'Rezervace potvrzena · ', + 'planner.notePlaceholder': 'Poznámka\u2026', + 'planner.noteTimePlaceholder': 'Čas (volitelné)', + 'planner.noteExamplePlaceholder': 'např. S3 ve 14:30 z hlavního nádraží, trajekt z přístaviště 7, přestávka na oběd\u2026', + 'planner.totalCost': 'Celkové náklady', + 'planner.searchPlaces': 'Hledat místa\u2026', + 'planner.allCategories': 'Všechny kategorie', + 'planner.noPlacesFound': 'Žádná místa nenalezena', + 'planner.addFirstPlace': 'Přidat první místo', + 'planner.noReservations': 'Žádné rezervace', + 'planner.addFirstReservation': 'Přidat první rezervaci', + 'planner.new': 'Nový', + 'planner.addToDay': '+ Den', + 'planner.calculating': 'Počítání\u2026', + 'planner.route': 'Trasa', + 'planner.optimize': 'Optimalizovat', + 'planner.openGoogleMaps': 'Otevřít v Google Mapách', + 'planner.selectDayHint': 'Vyberte den ze seznamu vlevo pro zobrazení denního plánu', + 'planner.noPlacesForDay': 'Zatím žádná místa pro tento den', + 'planner.addPlacesLink': 'Přidat místa \u2192', + 'planner.minTotal': 'min. celkem', + 'planner.noReservation': 'Žádná rezervace', + 'planner.removeFromDay': 'Odebrat ze dne', + 'planner.addToThisDay': 'Přidat ke dni', + 'planner.overview': 'Přehled', + 'planner.noDays': 'Zatím žádné dny', + 'planner.editTripToAddDays': 'Upravte cestu pro přidání dnů', + 'planner.dayCount': '{n} dní', + 'planner.clickToUnlock': 'Klikněte pro odemčení', + 'planner.keepPosition': 'Zachovat pozici při optimalizaci trasy', + 'planner.dayDetails': 'Podrobnosti dne', + 'planner.dayN': 'Den {n}', + + // Statistiky (Dashboard Stats) + 'stats.countries': 'Země', + 'stats.cities': 'Města', + 'stats.trips': 'Cesty', + 'stats.places': 'Místa', + 'stats.worldProgress': 'Průzkum světa', + 'stats.visited': 'navštíveno', + 'stats.remaining': 'zbývá', + 'stats.visitedCountries': 'Navštívené země', + + // Detail dne (Day Detail Panel) + 'day.precipProb': 'Pravděpodobnost srážek', + 'day.precipitation': 'Srážky', + 'day.wind': 'Vítr', + 'day.sunrise': 'Východ slunce', + 'day.sunset': 'Západ slunce', + 'day.hourlyForecast': 'Hodinová předpověď', + 'day.climateHint': 'Historické průměry — reálná předpověď je k dispozici do 16 dnů od tohoto data.', + 'day.noWeather': 'Nejsou k dispozici žádná data o počasí. Přidejte místo se souřadnicemi.', + 'day.overview': 'Denní přehled', + 'day.accommodation': 'Ubytování', + 'day.addAccommodation': 'Přidat ubytování', + 'day.hotelDayRange': 'Použít na dny', + 'day.noPlacesForHotel': 'Nejprve přidejte místa ke své cestě', + 'day.allDays': 'Vše', + 'day.checkIn': 'Check-in', + 'day.checkOut': 'Check-out', + 'day.confirmation': 'Potvrzení', + 'day.editAccommodation': 'Upravit ubytování', + 'day.reservations': 'Rezervace', + + // Fotky / Immich + 'memories.title': 'Fotky', + 'memories.notConnected': 'Immich není připojen', + 'memories.notConnectedHint': 'Připojte svoji instanci Immich v Nastavení, abyste zde viděli fotky z cest.', + 'memories.noDates': 'Přidejte data k cestě pro načtení fotek.', + 'memories.noPhotos': 'Nenalezeny žádné fotky', + 'memories.noPhotosHint': 'V Immich nebyly nalezeny žádné fotky pro období této cesty.', + 'memories.photosFound': 'fotek', + 'memories.fromOthers': 'od ostatních', + 'memories.sharePhotos': 'Sdílet fotky', + 'memories.sharing': 'Sdílení', + 'memories.reviewTitle': 'Zkontrolujte své fotky', + 'memories.reviewHint': 'Klikněte na fotky pro vyloučení ze sdílení.', + 'memories.shareCount': 'Sdílet {count} fotek', + 'memories.immichUrl': 'URL serveru Immich', + 'memories.immichApiKey': 'API klíč', + 'memories.testConnection': 'Otestovat připojení', + 'memories.connected': 'Připojeno', + 'memories.disconnected': 'Nepřipojeno', + 'memories.connectionSuccess': 'Připojeno k Immich', + 'memories.connectionError': 'Nepodařilo se připojit k Immich', + 'memories.saved': 'Nastavení Immich uloženo', + 'memories.addPhotos': 'Přidat fotky', + 'memories.selectPhotos': 'Vybrat fotky z Immich', + 'memories.selectHint': 'Klepněte na fotky pro jejich výběr.', + 'memories.selected': 'vybráno', + 'memories.addSelected': 'Přidat {count} fotek', + 'memories.alreadyAdded': 'Přidáno', + 'memories.private': 'Soukromé', + 'memories.stopSharing': 'Zastavit sdílení', + 'memories.oldest': 'Nejstarší', + 'memories.newest': 'Nejnovější', + 'memories.allLocations': 'Všechna místa', + 'memories.tripDates': 'Data cesty', + 'memories.allPhotos': 'Všechny fotky', + 'memories.confirmShareTitle': 'Sdílet se členy cesty?', + 'memories.confirmShareHint': '{count} fotek bude viditelných pro všechny členy této cesty. Jednotlivé fotky můžete později nastavit jako soukromé.', + 'memories.confirmShareButton': 'Sdílet fotky', + + // Spolupráce (Collab) + 'collab.tabs.chat': 'Chat', + 'collab.tabs.notes': 'Poznámky', + 'collab.tabs.polls': 'Hlasování', + 'collab.whatsNext.title': 'Co následuje', + 'collab.whatsNext.today': 'Dnes', + 'collab.whatsNext.tomorrow': 'Zítra', + 'collab.whatsNext.empty': 'Žádné nadcházející aktivity', + 'collab.whatsNext.until': 'do', + 'collab.whatsNext.emptyHint': 'Aktivity s časem se zde zobrazí', + 'collab.chat.send': 'Odeslat', + 'collab.chat.placeholder': 'Napište zprávu...', + 'collab.chat.empty': 'Začněte konverzaci', + 'collab.chat.emptyHint': 'Zprávy jsou sdíleny se všemi členy cesty', + 'collab.chat.emptyDesc': 'Sdílejte nápady, plány a novinky se svou cestovatelskou skupinou', 'collab.chat.today': 'Dnes', 'collab.chat.yesterday': 'Včera', 'collab.chat.deletedMessage': 'smazal zprávu', @@ -790,6 +1316,10 @@ const cs: Record = { 'collab.notes.attachFiles': 'Přiložit soubory', 'collab.notes.noCategoriesYet': 'Zatím žádné kategorie', 'collab.notes.emptyDesc': 'Vytvořte poznámku a začněte', + 'collab.notes.contentPlaceholder': 'Napište něco...', + 'collab.notes.categoryPlaceholder': 'Kategorie', + 'collab.notes.newCategory': 'Nová kategorie...', + 'collab.notes.category': 'Kategorie', 'collab.polls.title': 'Hlasování', 'collab.polls.new': 'Nové hlasování', 'collab.polls.empty': 'Zatím žádná hlasování', @@ -798,5 +1328,18 @@ const cs: Record = { 'collab.polls.questionPlaceholder': 'Co bychom měli dělat?', 'collab.polls.addOption': '+ Přidat možnost', 'collab.polls.optionPlaceholder': 'Možnost {n}', - 'collab.polls.create': 'Vytvořit', -}; \ No newline at end of file + 'collab.polls.create': 'Vytvořit hlasování', + 'collab.polls.close': 'Uzavřít', + 'collab.polls.closed': 'Uzavřeno', + 'collab.polls.votes': '{n} hlasů', + 'collab.polls.vote': '{n} hlas', + 'collab.polls.multipleChoice': 'Více možností', + 'collab.polls.multiChoice': 'Více možností', + 'collab.polls.deadline': 'Termín', + 'collab.polls.option': 'Možnost', + 'collab.polls.options': 'Možnosti', + 'collab.polls.delete': 'Smazat', + 'collab.polls.closedSection': 'Uzavřené', +} + +export default cs diff --git a/client/src/i18n/translations/fr.ts b/client/src/i18n/translations/fr.ts index 24b87b9..079f0c1 100644 --- a/client/src/i18n/translations/fr.ts +++ b/client/src/i18n/translations/fr.ts @@ -454,6 +454,20 @@ const fr: Record = { 'admin.weather.requestsDesc': 'Gratuit, aucune clé API requise', 'admin.weather.locationHint': 'La météo est basée sur le premier lieu avec des coordonnées de chaque jour. Si aucun lieu n\'est attribué à un jour, un lieu de la liste est utilisé comme référence.', + 'admin.tabs.audit': 'Journal d\'audit', + + 'admin.audit.subtitle': 'Événements sensibles de sécurité et d\'administration (sauvegardes, utilisateurs, 2FA, paramètres).', + 'admin.audit.empty': 'Aucune entrée d\'audit.', + 'admin.audit.refresh': 'Actualiser', + 'admin.audit.loadMore': 'Charger plus', + 'admin.audit.showing': '{count} chargées · {total} au total', + 'admin.audit.col.time': 'Heure', + 'admin.audit.col.user': 'Utilisateur', + 'admin.audit.col.action': 'Action', + 'admin.audit.col.resource': 'Ressource', + 'admin.audit.col.ip': 'IP', + 'admin.audit.col.details': 'Détails', + // GitHub 'admin.tabs.github': 'GitHub', 'admin.github.title': 'Historique des versions', diff --git a/client/src/i18n/translations/hu.ts b/client/src/i18n/translations/hu.ts new file mode 100644 index 0000000..212287c --- /dev/null +++ b/client/src/i18n/translations/hu.ts @@ -0,0 +1,1340 @@ +const hu: Record = { + // Általános + 'common.save': 'Mentés', + 'common.cancel': 'Mégse', + 'common.delete': 'Törlés', + 'common.edit': 'Szerkesztés', + 'common.add': 'Hozzáadás', + 'common.loading': 'Betöltés...', + 'common.error': 'Hiba', + 'common.back': 'Vissza', + 'common.all': 'Összes', + 'common.close': 'Bezárás', + 'common.open': 'Megnyitás', + 'common.upload': 'Feltöltés', + 'common.search': 'Keresés', + 'common.confirm': 'Megerősítés', + 'common.ok': 'OK', + 'common.yes': 'Igen', + 'common.no': 'Nem', + 'common.or': 'vagy', + 'common.none': 'Nincs', + 'common.date': 'Dátum', + 'common.rename': 'Átnevezés', + 'common.name': 'Név', + 'common.email': 'E-mail', + 'common.password': 'Jelszó', + 'common.saving': 'Mentés...', + 'common.update': 'Frissítés', + 'common.change': 'Módosítás', + 'common.uploading': 'Feltöltés…', + 'common.backToPlanning': 'Vissza a tervezéshez', + 'common.reset': 'Visszaállítás', + + // Navbar + 'nav.trip': 'Utazás', + 'nav.share': 'Megosztás', + 'nav.settings': 'Beállítások', + 'nav.admin': 'Admin', + 'nav.logout': 'Kijelentkezés', + 'nav.lightMode': 'Világos mód', + 'nav.darkMode': 'Sötét mód', + 'nav.autoMode': 'Automatikus mód', + 'nav.administrator': 'Adminisztrátor', + + // Irányítópult + 'dashboard.title': 'Utazásaim', + 'dashboard.subtitle.loading': 'Utazások betöltése...', + 'dashboard.subtitle.trips': '{count} utazás ({archived} archivált)', + 'dashboard.subtitle.empty': 'Indítsd el az első utazásodat', + 'dashboard.subtitle.activeOne': '{count} aktív utazás', + 'dashboard.subtitle.activeMany': '{count} aktív utazás', + 'dashboard.subtitle.archivedSuffix': ' · {count} archivált', + 'dashboard.newTrip': 'Új utazás', + 'dashboard.gridView': 'Rácsnézet', + 'dashboard.listView': 'Listanézet', + 'dashboard.currency': 'Pénznem', + 'dashboard.timezone': 'Időzónák', + 'dashboard.localTime': 'Helyi', + 'dashboard.timezoneCustomTitle': 'Egyéni időzóna', + 'dashboard.timezoneCustomLabelPlaceholder': 'Címke (opcionális)', + 'dashboard.timezoneCustomTzPlaceholder': 'pl. America/New_York', + 'dashboard.timezoneCustomAdd': 'Hozzáadás', + 'dashboard.timezoneCustomErrorEmpty': 'Adj meg egy időzóna-azonosítót', + 'dashboard.timezoneCustomErrorInvalid': 'Érvénytelen időzóna. Használj Europe/Berlin formátumot', + 'dashboard.timezoneCustomErrorDuplicate': 'Már hozzáadva', + 'dashboard.emptyTitle': 'Még nincsenek utazások', + 'dashboard.emptyText': 'Hozd létre az első utazásodat, és kezdj el tervezni helyeket, napi programokat és csomagolási listákat.', + 'dashboard.emptyButton': 'Első utazás létrehozása', + 'dashboard.nextTrip': 'Következő utazás', + 'dashboard.shared': 'Megosztott', + 'dashboard.sharedBy': 'Megosztotta: {name}', + 'dashboard.days': 'nap', + 'dashboard.places': 'hely', + 'dashboard.archive': 'Archiválás', + 'dashboard.restore': 'Visszaállítás', + 'dashboard.archived': 'Archivált', + 'dashboard.status.ongoing': 'Folyamatban', + 'dashboard.status.today': 'Ma', + 'dashboard.status.tomorrow': 'Holnap', + 'dashboard.status.past': 'Múlt', + 'dashboard.status.daysLeft': 'Még {count} nap', + 'dashboard.toast.loadError': 'Nem sikerült betölteni az utazásokat', + 'dashboard.toast.created': 'Utazás sikeresen létrehozva!', + 'dashboard.toast.createError': 'Nem sikerült létrehozni', + 'dashboard.toast.updated': 'Utazás frissítve!', + 'dashboard.toast.updateError': 'Nem sikerült frissíteni', + 'dashboard.toast.deleted': 'Utazás törölve', + 'dashboard.toast.deleteError': 'Nem sikerült törölni', + 'dashboard.toast.archived': 'Utazás archiválva', + 'dashboard.toast.archiveError': 'Nem sikerült archiválni', + 'dashboard.toast.restored': 'Utazás visszaállítva', + 'dashboard.toast.restoreError': 'Nem sikerült visszaállítani', + 'dashboard.confirm.delete': '"{title}" utazás törlése? Minden hely és terv véglegesen törlődik.', + 'dashboard.editTrip': 'Utazás szerkesztése', + 'dashboard.createTrip': 'Új utazás létrehozása', + 'dashboard.tripTitle': 'Cím', + 'dashboard.tripTitlePlaceholder': 'pl. Nyár Japánban', + 'dashboard.tripDescription': 'Leírás', + 'dashboard.tripDescriptionPlaceholder': 'Miről szól ez az utazás?', + 'dashboard.startDate': 'Kezdő dátum', + 'dashboard.endDate': 'Záró dátum', + 'dashboard.noDateHint': 'Nincs dátum megadva — 7 alapértelmezett nap jön létre. Ezt bármikor módosíthatod.', + 'dashboard.coverImage': 'Borítókép', + 'dashboard.addCoverImage': 'Borítókép hozzáadása', + 'dashboard.addMembers': 'Útitársak', + 'dashboard.addMember': 'Tag hozzáadása', + 'dashboard.coverSaved': 'Borítókép mentve', + 'dashboard.coverUploadError': 'Feltöltés sikertelen', + 'dashboard.coverRemoveError': 'Eltávolítás sikertelen', + 'dashboard.titleRequired': 'A cím megadása kötelező', + 'dashboard.endDateError': 'A záró dátumnak a kezdő dátum után kell lennie', + + // Beállítások + 'settings.title': 'Beállítások', + 'settings.subtitle': 'Személyes beállítások konfigurálása', + 'settings.map': 'Térkép', + 'settings.mapTemplate': 'Térkép sablon', + 'settings.mapTemplatePlaceholder.select': 'Sablon kiválasztása...', + 'settings.mapDefaultHint': 'Hagyd üresen az OpenStreetMap használatához (alapértelmezett)', + 'settings.mapTemplatePlaceholder': 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + 'settings.mapHint': 'URL sablon a térképcsempékhez', + 'settings.latitude': 'Szélességi fok', + 'settings.longitude': 'Hosszúsági fok', + 'settings.saveMap': 'Térkép mentése', + 'settings.apiKeys': 'API kulcsok', + 'settings.mapsKey': 'Google Maps API kulcs', + 'settings.mapsKeyHint': 'Helykereséséhez. Places API (New) szükséges. Létrehozás: console.cloud.google.com', + 'settings.weatherKey': 'OpenWeatherMap API kulcs', + 'settings.weatherKeyHint': 'Időjárás adatokhoz. Ingyenes: openweathermap.org/api', + 'settings.keyPlaceholder': 'Kulcs megadása...', + 'settings.configured': 'Konfigurálva', + 'settings.saveKeys': 'Kulcsok mentése', + 'settings.display': 'Megjelenítés', + 'settings.colorMode': 'Színmód', + 'settings.light': 'Világos', + 'settings.dark': 'Sötét', + 'settings.auto': 'Automatikus', + 'settings.language': 'Nyelv', + 'settings.temperature': 'Hőmérséklet egység', + 'settings.timeFormat': 'Időformátum', + 'settings.routeCalculation': 'Útvonalszámítás', + 'settings.blurBookingCodes': 'Foglalási kódok elrejtése', + 'settings.notifications': 'Értesítések', + 'settings.notifyTripInvite': 'Utazási meghívók', + 'settings.notifyBookingChange': 'Foglalási változások', + 'settings.notifyTripReminder': 'Utazási emlékeztetők', + 'settings.notifyVacayInvite': 'Vacay összevonási meghívók', + 'settings.notifyPhotosShared': 'Megosztott fotók (Immich)', + 'settings.notifyCollabMessage': 'Csevegés üzenetek (Collab)', + 'settings.notifyPackingTagged': 'Csomagolási lista: hozzárendelések', + 'settings.notifyWebhook': 'Webhook értesítések', + 'settings.on': 'Be', + 'settings.off': 'Ki', + 'settings.account': 'Fiók', + 'settings.username': 'Felhasználónév', + 'settings.email': 'E-mail', + 'settings.role': 'Szerepkör', + 'settings.roleAdmin': 'Adminisztrátor', + 'settings.oidcLinked': 'Összekapcsolva:', + 'settings.changePassword': 'Jelszó módosítása', + 'settings.currentPassword': 'Jelenlegi jelszó', + 'settings.newPassword': 'Új jelszó', + 'settings.confirmPassword': 'Új jelszó megerősítése', + 'settings.updatePassword': 'Jelszó frissítése', + 'settings.passwordRequired': 'Kérjük, add meg a jelenlegi és az új jelszót', + 'settings.currentPasswordRequired': 'A jelenlegi jelszó megadása kötelező', + 'settings.passwordTooShort': 'A jelszónak legalább 8 karakter hosszúnak kell lennie', + 'settings.passwordWeak': 'A jelszónak tartalmaznia kell nagybetűt, kisbetűt és számot', + 'settings.passwordMismatch': 'A jelszavak nem egyeznek', + 'settings.passwordChanged': 'Jelszó sikeresen módosítva', + 'settings.deleteAccount': 'Törlés', + 'settings.deleteAccountTitle': 'Biztosan törölni szeretnéd a fiókodat?', + 'settings.deleteAccountWarning': 'A fiókod és minden utazásod, helyed és fájlod véglegesen törlődik. Ez a művelet nem vonható vissza.', + 'settings.deleteAccountConfirm': 'Végleges törlés', + 'settings.deleteBlockedTitle': 'Törlés nem lehetséges', + 'settings.deleteBlockedMessage': 'Te vagy az egyetlen adminisztrátor. Nevezz ki egy másik felhasználót adminnak, mielőtt törölnéd a fiókodat.', + 'settings.roleUser': 'Felhasználó', + 'settings.saveProfile': 'Mentés', + 'settings.toast.mapSaved': 'Térképbeállítások mentve', + 'settings.toast.keysSaved': 'API kulcsok mentve', + 'settings.toast.displaySaved': 'Megjelenítési beállítások mentve', + 'settings.toast.profileSaved': 'Profil frissítve', + 'settings.uploadAvatar': 'Profilkép feltöltése', + 'settings.removeAvatar': 'Profilkép eltávolítása', + 'settings.avatarUploaded': 'Profilkép frissítve', + 'settings.avatarRemoved': 'Profilkép eltávolítva', + 'settings.avatarError': 'Feltöltés sikertelen', + 'settings.mfa.title': 'Kétfaktoros hitelesítés (2FA)', + 'settings.mfa.description': 'Egy második lépést ad a bejelentkezéshez e-mail és jelszó használatakor. Használj hitelesítő alkalmazást (Google Authenticator, Authy stb.).', + 'settings.mfa.enabled': '2FA engedélyezve van a fiókodban.', + 'settings.mfa.disabled': '2FA nincs engedélyezve.', + 'settings.mfa.setup': 'Hitelesítő beállítása', + 'settings.mfa.scanQr': 'Olvasd be ezt a QR-kódot az alkalmazásoddal, vagy add meg manuálisan a titkos kulcsot.', + 'settings.mfa.secretLabel': 'Titkos kulcs (kézi megadás)', + 'settings.mfa.codePlaceholder': '6 jegyű kód', + 'settings.mfa.enable': '2FA engedélyezése', + 'settings.mfa.cancelSetup': 'Mégse', + 'settings.mfa.disableTitle': '2FA kikapcsolása', + 'settings.mfa.disableHint': 'Add meg a fiókod jelszavát és a hitelesítő alkalmazás aktuális kódját.', + 'settings.mfa.disable': '2FA kikapcsolása', + 'settings.mfa.toastEnabled': 'Kétfaktoros hitelesítés engedélyezve', + 'settings.mfa.toastDisabled': 'Kétfaktoros hitelesítés kikapcsolva', + 'settings.mfa.demoBlocked': 'Demo módban nem érhető el', + 'admin.smtp.title': 'E-mail és értesítések', + 'admin.smtp.hint': 'SMTP konfiguráció e-mail értesítésekhez. Opcionális: Webhook URL Discordhoz, Slackhez stb.', + 'admin.smtp.testButton': 'Teszt e-mail küldése', + 'admin.smtp.testSuccess': 'Teszt e-mail sikeresen elküldve', + 'admin.smtp.testFailed': 'Teszt e-mail küldése sikertelen', + 'dayplan.icsTooltip': 'Naptár exportálása (ICS)', + 'share.linkTitle': 'Nyilvános link', + 'share.linkHint': 'Hozz létre egy linket, amellyel bárki megtekintheti ezt az utazást bejelentkezés nélkül. Csak olvasható — szerkesztés nem lehetséges.', + 'share.createLink': 'Link létrehozása', + 'share.deleteLink': 'Link törlése', + 'share.createError': 'Nem sikerült létrehozni a linket', + 'common.copy': 'Másolás', + 'common.copied': 'Másolva', + 'share.permMap': 'Térkép és terv', + 'share.permBookings': 'Foglalások', + 'share.permPacking': 'Csomagolás', + 'shared.expired': 'Link lejárt vagy érvénytelen', + 'shared.expiredHint': 'Ez a megosztott utazási link már nem aktív.', + 'shared.readOnly': 'Csak olvasható megosztott nézet', + 'shared.tabPlan': 'Terv', + 'shared.tabBookings': 'Foglalások', + 'shared.tabPacking': 'Csomagolás', + 'shared.tabBudget': 'Költségvetés', + 'shared.tabChat': 'Csevegés', + 'shared.days': 'nap', + 'shared.places': 'hely', + 'shared.other': 'Egyéb', + 'shared.totalBudget': 'Teljes költségvetés', + 'shared.messages': 'üzenet', + 'shared.sharedVia': 'Megosztva:', + 'shared.confirmed': 'Megerősítve', + 'shared.pending': 'Függőben', + 'share.permBudget': 'Költségvetés', + 'share.permCollab': 'Csevegés', + + // Bejelentkezés + 'login.error': 'Bejelentkezés sikertelen. Kérjük, ellenőrizd a megadott adatokat.', + 'login.tagline': 'Az utazásaid.\nA terved.', + 'login.description': 'Tervezz utazásokat közösen interaktív térképekkel, költségvetéssel és valós idejű szinkronizálással.', + 'login.features.maps': 'Interaktív térképek', + 'login.features.mapsDesc': 'Google Places, útvonalak és csoportosítás', + 'login.features.realtime': 'Valós idejű szinkron', + 'login.features.realtimeDesc': 'Közös tervezés WebSocket-en keresztül', + 'login.features.budget': 'Költségvetés-követés', + 'login.features.budgetDesc': 'Kategóriák, diagramok és személyenkénti költségek', + 'login.features.collab': 'Együttműködés', + 'login.features.collabDesc': 'Többfelhasználós, megosztott utazásokkal', + 'login.features.packing': 'Csomagolási listák', + 'login.features.packingDesc': 'Kategóriák és haladás', + 'login.features.bookings': 'Foglalások', + 'login.features.bookingsDesc': 'Repülők, szállodák, éttermek és még több', + 'login.features.files': 'Dokumentumok', + 'login.features.filesDesc': 'Fájlok feltöltése és kezelése', + 'login.features.routes': 'Útvonal-optimalizálás', + 'login.features.routesDesc': 'Automatikus optimalizálás és Google Maps export', + 'login.selfHosted': 'Saját üzemeltetés \u00B7 Nyílt forráskód \u00B7 Az adataid nálad maradnak', + 'login.title': 'Bejelentkezés', + 'login.subtitle': 'Üdv újra', + 'login.signingIn': 'Bejelentkezés…', + 'login.signIn': 'Bejelentkezés', + 'login.createAdmin': 'Admin fiók létrehozása', + 'login.createAdminHint': 'Hozd létre az első admin fiókot a TREK-hez.', + 'login.createAccount': 'Fiók létrehozása', + 'login.createAccountHint': 'Új fiók regisztrálása.', + 'login.creating': 'Létrehozás…', + 'login.noAccount': 'Nincs még fiókod?', + 'login.hasAccount': 'Már van fiókod?', + 'login.register': 'Regisztráció', + 'login.emailPlaceholder': 'email@cimed.hu', + 'login.username': 'Felhasználónév', + 'login.oidc.registrationDisabled': 'A regisztráció le van tiltva. Lépj kapcsolatba az adminisztrátorral.', + 'login.oidc.noEmail': 'Nem érkezett e-mail a szolgáltatótól.', + 'login.oidc.tokenFailed': 'Hitelesítés sikertelen.', + 'login.oidc.invalidState': 'Érvénytelen munkamenet. Kérjük, próbáld újra.', + 'login.demoFailed': 'Demo bejelentkezés sikertelen', + 'login.oidcSignIn': 'Bejelentkezés ezzel: {name}', + 'login.oidcOnly': 'A jelszavas hitelesítés le van tiltva. Kérjük, jelentkezz be az SSO szolgáltatódon keresztül.', + 'login.demoHint': 'Próbáld ki a demót — regisztráció nélkül', + 'login.mfaTitle': 'Kétfaktoros hitelesítés', + 'login.mfaSubtitle': 'Add meg a 6 jegyű kódot a hitelesítő alkalmazásból.', + 'login.mfaCodeLabel': 'Ellenőrző kód', + 'login.mfaCodeRequired': 'Add meg a kódot a hitelesítő alkalmazásból.', + 'login.mfaHint': 'Nyisd meg a Google Authenticator, Authy vagy más TOTP alkalmazást.', + 'login.mfaBack': '← Vissza a bejelentkezéshez', + 'login.mfaVerify': 'Ellenőrzés', + + // Regisztráció + 'register.passwordMismatch': 'A jelszavak nem egyeznek', + 'register.passwordTooShort': 'A jelszónak legalább 6 karakter hosszúnak kell lennie', + 'register.failed': 'Regisztráció sikertelen', + 'register.getStarted': 'Kezdjük', + 'register.subtitle': 'Hozz létre egy fiókot, és kezdd el megtervezni álomutazásaidat.', + 'register.feature1': 'Korlátlan utazási tervek', + 'register.feature2': 'Interaktív térképnézet', + 'register.feature3': 'Helyek és kategóriák kezelése', + 'register.feature4': 'Foglalások nyomon követése', + 'register.feature5': 'Csomagolási listák készítése', + 'register.feature6': 'Fényképek és fájlok tárolása', + 'register.createAccount': 'Fiók létrehozása', + 'register.startPlanning': 'Kezdd el az utazástervezést', + 'register.minChars': 'Min. 6 karakter', + 'register.confirmPassword': 'Jelszó megerősítése', + 'register.repeatPassword': 'Jelszó ismétlése', + 'register.registering': 'Regisztráció...', + 'register.register': 'Regisztráció', + 'register.hasAccount': 'Már van fiókod?', + 'register.signIn': 'Bejelentkezés', + + // Admin + 'admin.title': 'Adminisztráció', + 'admin.subtitle': 'Felhasználókezelés és rendszerbeállítások', + 'admin.tabs.users': 'Felhasználók', + 'admin.tabs.categories': 'Kategóriák', + 'admin.tabs.backup': 'Biztonsági mentés', + 'admin.stats.users': 'Felhasználók', + 'admin.stats.trips': 'Utazások', + 'admin.stats.places': 'Helyek', + 'admin.stats.photos': 'Fotók', + 'admin.stats.files': 'Fájlok', + 'admin.table.user': 'Felhasználó', + 'admin.table.email': 'E-mail', + 'admin.table.role': 'Szerepkör', + 'admin.table.created': 'Létrehozva', + 'admin.table.lastLogin': 'Utolsó belépés', + 'admin.table.actions': 'Műveletek', + 'admin.you': '(Te)', + 'admin.editUser': 'Felhasználó szerkesztése', + 'admin.newPassword': 'Új jelszó', + 'admin.newPasswordHint': 'Hagyd üresen a jelenlegi jelszó megtartásához', + 'admin.deleteUser': '"{name}" felhasználó törlése? Minden utazás véglegesen törlődik.', + 'admin.deleteUserTitle': 'Felhasználó törlése', + 'admin.newPasswordPlaceholder': 'Új jelszó megadása…', + 'admin.toast.loadError': 'Nem sikerült betölteni az admin adatokat', + 'admin.toast.userUpdated': 'Felhasználó frissítve', + 'admin.toast.updateError': 'Nem sikerült frissíteni', + 'admin.toast.userDeleted': 'Felhasználó törölve', + 'admin.toast.deleteError': 'Nem sikerült törölni', + 'admin.toast.cannotDeleteSelf': 'Saját fiók nem törölhető', + 'admin.toast.userCreated': 'Felhasználó létrehozva', + 'admin.toast.createError': 'Nem sikerült létrehozni a felhasználót', + 'admin.toast.fieldsRequired': 'Felhasználónév, e-mail és jelszó megadása kötelező', + 'admin.createUser': 'Felhasználó létrehozása', + 'admin.invite.title': 'Meghívó linkek', + 'admin.invite.subtitle': 'Egyszer használatos regisztrációs linkek létrehozása', + 'admin.invite.create': 'Link létrehozása', + 'admin.invite.createAndCopy': 'Létrehozás és másolás', + 'admin.invite.empty': 'Még nincsenek meghívó linkek', + 'admin.invite.maxUses': 'Max. használat', + 'admin.invite.expiry': 'Lejárat', + 'admin.invite.uses': 'felhasználva', + 'admin.invite.expiresAt': 'lejár', + 'admin.invite.createdBy': 'készítette', + 'admin.invite.active': 'Aktív', + 'admin.invite.expired': 'Lejárt', + 'admin.invite.usedUp': 'Elhasználva', + 'admin.invite.copied': 'Meghívó link vágólapra másolva', + 'admin.invite.copyLink': 'Link másolása', + 'admin.invite.deleted': 'Meghívó link törölve', + 'admin.invite.createError': 'Nem sikerült létrehozni a meghívó linket', + 'admin.invite.deleteError': 'Nem sikerült törölni a meghívó linket', + 'admin.tabs.settings': 'Beállítások', + 'admin.allowRegistration': 'Regisztráció engedélyezése', + 'admin.allowRegistrationHint': 'Új felhasználók regisztrálhatják magukat', + 'admin.apiKeys': 'API kulcsok', + 'admin.apiKeysHint': 'Opcionális. Bővített helyadatokat tesz lehetővé, például fotókat és időjárást.', + 'admin.mapsKey': 'Google Maps API kulcs', + 'admin.mapsKeyHint': 'Helykereséshez szükséges. Létrehozás: console.cloud.google.com', + 'admin.mapsKeyHintLong': 'API kulcs nélkül az OpenStreetMap szolgál helykeresésre. Google API kulccsal képek, értékelések és nyitvatartás is betölthetők. Létrehozás: console.cloud.google.com.', + 'admin.recommended': 'Ajánlott', + 'admin.weatherKey': 'OpenWeatherMap API kulcs', + 'admin.weatherKeyHint': 'Időjárás adatokhoz. Ingyenes: openweathermap.org', + 'admin.validateKey': 'Teszt', + 'admin.keyValid': 'Csatlakozva', + 'admin.keyInvalid': 'Érvénytelen', + 'admin.keySaved': 'API kulcsok mentve', + 'admin.oidcTitle': 'Egyszeri bejelentkezés (OIDC)', + 'admin.oidcSubtitle': 'Bejelentkezés külső szolgáltatókon keresztül, pl. Google, Apple, Authentik vagy Keycloak.', + 'admin.oidcDisplayName': 'Megjelenítendő név', + 'admin.oidcIssuer': 'Issuer URL', + 'admin.oidcIssuerHint': 'A szolgáltató OpenID Connect Issuer URL-je. pl. https://accounts.google.com', + 'admin.oidcSaved': 'OIDC konfiguráció mentve', + 'admin.oidcOnlyMode': 'Jelszavas hitelesítés letiltása', + 'admin.oidcOnlyModeHint': 'Ha engedélyezve van, csak SSO bejelentkezés lehetséges. A jelszavas bejelentkezés és regisztráció le van tiltva.', + + // Fájltípusok + 'admin.fileTypes': 'Engedélyezett fájltípusok', + 'admin.fileTypesHint': 'Állítsd be, milyen fájltípusokat tölthetnek fel a felhasználók.', + 'admin.fileTypesFormat': 'Vesszővel elválasztott kiterjesztések (pl. jpg,png,pdf,doc). Használj *-ot az összes típus engedélyezéséhez.', + 'admin.fileTypesSaved': 'Fájltípus-beállítások mentve', + + // Csomagolási sablonok és poggyászkövetés + 'admin.bagTracking.title': 'Poggyászkövetés', + 'admin.bagTracking.subtitle': 'Súly- és táskahozzárendelés engedélyezése csomagolási tételeknél', + 'admin.tabs.config': 'Konfiguráció', + 'admin.tabs.templates': 'Csomagolási sablonok', + 'admin.packingTemplates.title': 'Csomagolási sablonok', + 'admin.packingTemplates.subtitle': 'Újrafelhasználható csomagolási listák létrehozása utazásaidhoz', + 'admin.packingTemplates.create': 'Új sablon', + 'admin.packingTemplates.namePlaceholder': 'Sablon neve (pl. Tengerparti nyaralás)', + 'admin.packingTemplates.empty': 'Még nincsenek sablonok', + 'admin.packingTemplates.items': 'tétel', + 'admin.packingTemplates.categories': 'kategória', + 'admin.packingTemplates.itemName': 'Tétel neve', + 'admin.packingTemplates.itemCategory': 'Kategória', + 'admin.packingTemplates.categoryName': 'Kategória neve (pl. Ruházat)', + 'admin.packingTemplates.addCategory': 'Kategória hozzáadása', + 'admin.packingTemplates.created': 'Sablon létrehozva', + 'admin.packingTemplates.deleted': 'Sablon törölve', + 'admin.packingTemplates.loadError': 'Nem sikerült betölteni a sablonokat', + 'admin.packingTemplates.createError': 'Nem sikerült létrehozni a sablont', + 'admin.packingTemplates.deleteError': 'Nem sikerült törölni a sablont', + 'admin.packingTemplates.saveError': 'Nem sikerült menteni', + + // Bővítmények + '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': 'Csomagolás', + 'admin.addons.catalog.packing.description': 'Ellenőrzőlisták a poggyász előkészítéséhez minden utazáshoz', + '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', + 'admin.addons.catalog.documents.description': 'Úti dokumentumok tárolása és kezelése', + 'admin.addons.catalog.vacay.name': 'Vacay', + 'admin.addons.catalog.vacay.description': 'Személyes szabadságtervező naptárnézettel', + 'admin.addons.catalog.atlas.name': 'Atlasz', + 'admin.addons.catalog.atlas.description': 'Világtérkép meglátogatott országokkal és utazási statisztikákkal', + 'admin.addons.catalog.collab.name': 'Együttműködés', + 'admin.addons.catalog.collab.description': 'Valós idejű jegyzetek, szavazások és csevegés az utazás tervezéséhez', + 'admin.addons.catalog.memories.name': 'Fotók (Immich)', + 'admin.addons.catalog.memories.description': 'Utazási fotók megosztása az Immich példányon keresztül', + 'admin.addons.subtitleBefore': 'Funkciók engedélyezése vagy letiltása a ', + 'admin.addons.subtitleAfter': ' testreszabásához.', + 'admin.addons.enabled': 'Engedélyezve', + 'admin.addons.disabled': 'Letiltva', + 'admin.addons.type.trip': 'Utazás', + 'admin.addons.type.global': 'Globális', + 'admin.addons.tripHint': 'Fülként érhető el minden utazáson belül', + 'admin.addons.globalHint': 'Önálló szekcióként elérhető a fő navigációban', + 'admin.addons.toast.updated': 'Bővítmény frissítve', + 'admin.addons.toast.error': 'Nem sikerült frissíteni a bővítményt', + 'admin.addons.noAddons': 'Nincsenek elérhető bővítmények', + // Időjárás információ + 'admin.weather.title': 'Időjárás adatok', + 'admin.weather.badge': '2026. március 24. óta', + 'admin.weather.description': 'A TREK az Open-Meteo-t használja időjárás-adatforrásként. Az Open-Meteo egy ingyenes, nyílt forráskódú időjárás-szolgáltatás — nincs szükség API kulcsra.', + 'admin.weather.forecast': '16 napos előrejelzés', + 'admin.weather.forecastDesc': 'Korábban 5 nap volt (OpenWeatherMap)', + 'admin.weather.climate': 'Történelmi klímaadatok', + 'admin.weather.climateDesc': 'Az elmúlt 85 év átlagai a 16 napos előrejelzésen túli napokhoz', + 'admin.weather.requests': '10 000 kérés / nap', + 'admin.weather.requestsDesc': 'Ingyenes, nincs szükség API kulcsra', + 'admin.weather.locationHint': 'Az időjárás az adott nap első koordinátákkal rendelkező helye alapján készül. Ha nincs hely hozzárendelve a naphoz, a helylista bármelyik helye szolgál referenciául.', + + 'admin.tabs.audit': 'Auditnapló', + + 'admin.audit.subtitle': 'Biztonsági és adminisztrációs események (mentések, felhasználók, 2FA, beállítások).', + 'admin.audit.empty': 'Még nincsenek audit bejegyzések.', + 'admin.audit.refresh': 'Frissítés', + 'admin.audit.loadMore': 'Továbbiak betöltése', + 'admin.audit.showing': '{count} betöltve · {total} összesen', + 'admin.audit.col.time': 'Időpont', + 'admin.audit.col.user': 'Felhasználó', + 'admin.audit.col.action': 'Művelet', + 'admin.audit.col.resource': 'Erőforrás', + 'admin.audit.col.ip': 'IP', + 'admin.audit.col.details': 'Részletek', + + // GitHub + 'admin.tabs.github': 'GitHub', + 'admin.github.title': 'Frissítési előzmények', + 'admin.github.subtitle': 'Legújabb frissítések: {repo}', + 'admin.github.latest': 'Legújabb', + 'admin.github.prerelease': 'Előzetes kiadás', + 'admin.github.showDetails': 'Részletek megjelenítése', + 'admin.github.hideDetails': 'Részletek elrejtése', + 'admin.github.loadMore': 'Továbbiak betöltése', + 'admin.github.loading': 'Betöltés...', + 'admin.github.error': 'Nem sikerült betölteni a kiadásokat', + 'admin.github.by': 'készítette', + 'admin.github.support': 'Segít fenntartani a TREK fejlesztését', + + 'admin.update.available': 'Frissítés elérhető', + 'admin.update.text': 'A TREK {version} elérhető. Jelenleg a {current} verziót használod.', + 'admin.update.button': 'Megtekintés a GitHubon', + 'admin.update.install': 'Frissítés telepítése', + 'admin.update.confirmTitle': 'Frissítés telepítése?', + 'admin.update.confirmText': 'A TREK frissítésre kerül {current} verzióról {version} verzióra. A szerver ezután automatikusan újraindul.', + 'admin.update.dataInfo': 'Minden adat (utazások, felhasználók, API kulcsok, feltöltések, Vacay, Atlas, költségvetések) megmarad.', + 'admin.update.warning': 'Az alkalmazás az újraindítás alatt rövid ideig nem lesz elérhető.', + 'admin.update.confirm': 'Frissítés most', + 'admin.update.installing': 'Frissítés…', + 'admin.update.success': 'Frissítés telepítve! A szerver újraindul…', + 'admin.update.failed': 'Frissítés sikertelen', + 'admin.update.backupHint': 'Javasoljuk, hogy frissítés előtt készíts biztonsági mentést.', + 'admin.update.backupLink': 'Biztonsági mentéshez', + 'admin.update.howTo': 'Frissítési útmutató', + 'admin.update.dockerText': 'A TREK példányod Dockerben fut. A {version} verzióra frissítéshez futtasd a következő parancsokat a szervereden:', + 'admin.update.reloadHint': 'Kérjük, töltsd újra az oldalt néhány másodperc múlva.', + + // Vacay bővítmény + 'vacay.subtitle': 'Szabadságnapok tervezése és kezelése', + 'vacay.settings': 'Beállítások', + 'vacay.year': 'Év', + 'vacay.addYear': 'Év hozzáadása', + 'vacay.removeYear': 'Év eltávolítása', + 'vacay.removeYearConfirm': '{year} eltávolítása?', + 'vacay.removeYearHint': 'Az adott év összes szabadság-bejegyzése és céges szabadnapja véglegesen törlődik.', + 'vacay.remove': 'Eltávolítás', + 'vacay.persons': 'Személyek', + 'vacay.noPersons': 'Nincsenek személyek hozzáadva', + 'vacay.addPerson': 'Személy hozzáadása', + 'vacay.editPerson': 'Személy szerkesztése', + 'vacay.removePerson': 'Személy eltávolítása', + 'vacay.removePersonConfirm': '{name} eltávolítása?', + 'vacay.removePersonHint': 'A személy összes szabadság-bejegyzése véglegesen törlődik.', + 'vacay.personName': 'Név', + 'vacay.personNamePlaceholder': 'Név megadása', + 'vacay.color': 'Szín', + 'vacay.add': 'Hozzáadás', + 'vacay.legend': 'Jelmagyarázat', + 'vacay.publicHoliday': 'Ünnepnap', + 'vacay.companyHoliday': 'Céges szabadnap', + 'vacay.weekend': 'Hétvége', + 'vacay.modeVacation': 'Szabadság', + 'vacay.modeCompany': 'Céges szabadnap', + 'vacay.entitlement': 'Szabadságkeret', + 'vacay.entitlementDays': 'nap', + 'vacay.used': 'Felhasznált', + 'vacay.remaining': 'Maradt', + 'vacay.carriedOver': '{year}-ból/ből', + 'vacay.blockWeekends': 'Hétvégék zárolása', + 'vacay.blockWeekendsHint': 'Szabadság-bejegyzések megakadályozása szombaton és vasárnap', + 'vacay.publicHolidays': 'Ünnepnapok', + 'vacay.publicHolidaysHint': 'Ünnepnapok megjelölése a naptárban', + 'vacay.selectCountry': 'Ország kiválasztása', + 'vacay.selectRegion': 'Régió kiválasztása (opcionális)', + 'vacay.addCalendar': 'Naptár hozzáadása', + 'vacay.calendarLabel': 'Címke (opcionális)', + 'vacay.calendarColor': 'Szín', + 'vacay.noCalendars': 'Még nincsenek ünnepnap-naptárak hozzáadva', + 'vacay.weekendDays': 'Hétvégi napok', + 'vacay.mon': 'Hé', + 'vacay.tue': 'Ke', + 'vacay.wed': 'Sze', + 'vacay.thu': 'Csü', + 'vacay.fri': 'Pé', + 'vacay.sat': 'Szo', + 'vacay.sun': 'Va', + 'vacay.companyHolidays': 'Céges szabadnapok', + 'vacay.companyHolidaysHint': 'Céges szintű szabadnapok megjelölésének engedélyezése', + 'vacay.companyHolidaysNoDeduct': 'A céges szabadnapok nem számítanak bele a szabadságkeretbe.', + 'vacay.carryOver': 'Szabadság átvitele', + 'vacay.carryOverHint': 'Megmaradt szabadságnapok automatikus átvitele a következő évre', + 'vacay.sharing': 'Megosztás', + 'vacay.sharingHint': 'Szabadságterved megosztása más TREK felhasználókkal', + 'vacay.owner': 'Tulajdonos', + 'vacay.shareEmailPlaceholder': 'TREK felhasználó e-mail címe', + 'vacay.shareSuccess': 'Terv sikeresen megosztva', + 'vacay.shareError': 'Nem sikerült megosztani a tervet', + 'vacay.dissolve': 'Összevonás feloldása', + 'vacay.dissolveHint': 'Naptárak újbóli szétválasztása. A bejegyzéseid megmaradnak.', + 'vacay.dissolveAction': 'Feloldás', + 'vacay.dissolved': 'Naptár szétválasztva', + 'vacay.fusedWith': 'Összevonva:', + 'vacay.you': 'te', + 'vacay.noData': 'Nincs adat', + 'vacay.changeColor': 'Szín módosítása', + 'vacay.inviteUser': 'Felhasználó meghívása', + 'vacay.inviteHint': 'Hívj meg egy másik TREK felhasználót közös szabadságnaptár megosztásához.', + 'vacay.selectUser': 'Felhasználó kiválasztása', + 'vacay.sendInvite': 'Meghívó küldése', + 'vacay.inviteSent': 'Meghívó elküldve', + 'vacay.inviteError': 'Nem sikerült elküldeni a meghívót', + 'vacay.pending': 'függőben', + 'vacay.noUsersAvailable': 'Nincsenek elérhető felhasználók', + 'vacay.accept': 'Elfogadás', + 'vacay.decline': 'Elutasítás', + 'vacay.acceptFusion': 'Elfogadás és összevonás', + 'vacay.inviteTitle': 'Összevonási kérelem', + 'vacay.inviteWantsToFuse': 'szeretne megosztani veled egy szabadságnaptárat.', + 'vacay.fuseInfo1': 'Mindketten látjátok az összes szabadság-bejegyzést egy közös naptárban.', + 'vacay.fuseInfo2': 'Mindkét fél létrehozhat és szerkeszthet bejegyzéseket a másik számára.', + 'vacay.fuseInfo3': 'Mindkét fél törölhet bejegyzéseket és módosíthatja a szabadságkeretet.', + 'vacay.fuseInfo4': 'A beállítások, mint ünnepnapok és céges szabadnapok, közösen érvényesek.', + 'vacay.fuseInfo5': 'Az összevonás bármikor feloldható bármelyik fél által. A bejegyzések megmaradnak.', + 'nav.myTrips': 'Utazásaim', + + // Atlas bővítmény + 'atlas.subtitle': 'Utazási lábnyomod a világban', + 'atlas.countries': 'Országok', + 'atlas.trips': 'Utazások', + 'atlas.places': 'Helyek', + 'atlas.unmark': 'Eltávolítás', + 'atlas.confirmMark': 'Megjelölöd ezt az országot meglátogatottként?', + 'atlas.confirmUnmark': 'Eltávolítod ezt az országot a meglátogatottak listájáról?', + 'atlas.markVisited': 'Megjelölés meglátogatottként', + 'atlas.markVisitedHint': 'Ország hozzáadása a meglátogatottak listájához', + 'atlas.addToBucket': 'Hozzáadás a bakancslistához', + 'atlas.addPoi': 'Hely hozzáadása', + 'atlas.bucketNamePlaceholder': 'Név (ország, város, hely...)', + 'atlas.month': 'Hónap', + 'atlas.addToBucketHint': 'Mentés meglátogatni kívánt helyként', + 'atlas.bucketWhen': 'Mikor tervezed meglátogatni?', + 'atlas.statsTab': 'Statisztikák', + 'atlas.bucketTab': 'Bakancslista', + 'atlas.addBucket': 'Hozzáadás a bakancslistához', + 'atlas.bucketNamePlaceholder': 'Hely vagy úti cél...', + 'atlas.bucketNotesPlaceholder': 'Jegyzetek (opcionális)', + 'atlas.bucketEmpty': 'A bakancslistád üres', + 'atlas.bucketEmptyHint': 'Adj hozzá helyeket, ahová álmodsz eljutni', + 'atlas.days': 'Napok', + 'atlas.visitedCountries': 'Meglátogatott országok', + 'atlas.cities': 'Városok', + 'atlas.noData': 'Még nincsenek utazási adatok', + 'atlas.noDataHint': 'Hozz létre egy utazást és adj hozzá helyeket a világtérképhez', + 'atlas.lastTrip': 'Utolsó utazás', + 'atlas.nextTrip': 'Következő utazás', + 'atlas.daysLeft': 'nap van hátra', + 'atlas.streak': 'Sorozat', + 'atlas.year': 'év', + 'atlas.years': 'év', + 'atlas.yearInRow': 'egymást követő év', + 'atlas.yearsInRow': 'egymást követő év', + 'atlas.tripIn': 'utazás', + 'atlas.tripsIn': 'utazás', + 'atlas.since': 'óta', + 'atlas.europe': 'Európa', + 'atlas.asia': 'Ázsia', + 'atlas.northAmerica': 'É-Amerika', + 'atlas.southAmerica': 'D-Amerika', + 'atlas.africa': 'Afrika', + 'atlas.oceania': 'Óceánia', + 'atlas.other': 'Egyéb', + 'atlas.firstVisit': 'Első utazás', + 'atlas.lastVisitLabel': 'Utolsó utazás', + 'atlas.tripSingular': 'Utazás', + 'atlas.tripPlural': 'Utazások', + 'atlas.placeVisited': 'Meglátogatott hely', + 'atlas.placesVisited': 'Meglátogatott helyek', + + // Utazástervező + 'trip.tabs.plan': 'Terv', + 'trip.tabs.reservations': 'Foglalások', + 'trip.tabs.reservationsShort': 'Foglalás', + 'trip.tabs.packing': 'Csomagolási lista', + 'trip.tabs.packingShort': 'Csomag', + 'trip.tabs.budget': 'Költségvetés', + 'trip.tabs.files': 'Fájlok', + 'trip.loading': 'Utazás betöltése...', + 'trip.mobilePlan': 'Tervezés', + 'trip.mobilePlaces': 'Helyek', + 'trip.toast.placeUpdated': 'Hely frissítve', + 'trip.toast.placeAdded': 'Hely hozzáadva', + 'trip.toast.placeDeleted': 'Hely törölve', + 'trip.toast.selectDay': 'Kérjük, először válassz egy napot', + 'trip.toast.assignedToDay': 'Hely hozzárendelve a naphoz', + 'trip.toast.reorderError': 'Nem sikerült átrendezni', + 'trip.toast.reservationUpdated': 'Foglalás frissítve', + 'trip.toast.reservationAdded': 'Foglalás hozzáadva', + 'trip.toast.deleted': 'Törölve', + 'trip.confirm.deletePlace': 'Biztosan törölni szeretnéd ezt a helyet?', + + // Napi terv oldalsáv + 'dayplan.emptyDay': 'Nincs tervezett hely erre a napra', + 'dayplan.addNote': 'Jegyzet hozzáadása', + 'dayplan.editNote': 'Jegyzet szerkesztése', + 'dayplan.noteAdd': 'Jegyzet hozzáadása', + 'dayplan.noteEdit': 'Jegyzet szerkesztése', + 'dayplan.noteTitle': 'Jegyzet', + 'dayplan.noteSubtitle': 'Napi jegyzet', + 'dayplan.totalCost': 'Összköltség', + 'dayplan.days': 'nap', + 'dayplan.dayN': '{n}. nap', + 'dayplan.calculating': 'Számítás...', + 'dayplan.route': 'Útvonal', + 'dayplan.optimize': 'Optimalizálás', + 'dayplan.optimized': 'Útvonal optimalizálva', + 'dayplan.routeError': 'Nem sikerült kiszámítani az útvonalat', + 'dayplan.toast.needTwoPlaces': 'Legalább két hely szükséges az útvonal-optimalizáláshoz', + 'dayplan.toast.routeOptimized': 'Útvonal optimalizálva', + 'dayplan.toast.noGeoPlaces': 'Nem találhatók koordinátákkal rendelkező helyek az útvonalszámításhoz', + 'dayplan.confirmed': 'Megerősítve', + 'dayplan.pendingRes': 'Függőben', + 'dayplan.pdf': 'PDF', + 'dayplan.pdfTooltip': 'Napi terv exportálása PDF-be', + 'dayplan.pdfError': 'Nem sikerült a PDF exportálás', + 'dayplan.cannotReorderTransport': 'A rögzített időpontú foglalások nem rendezhetők át', + 'dayplan.confirmRemoveTimeTitle': 'Időpont eltávolítása?', + 'dayplan.confirmRemoveTimeBody': 'Ennek a helynek rögzített időpontja van ({time}). Az áthelyezéssel az időpont eltávolítódik és szabad rendezés válik lehetővé.', + 'dayplan.confirmRemoveTimeAction': 'Időpont eltávolítása és áthelyezés', + 'dayplan.cannotDropOnTimed': 'Elemek nem helyezhetők rögzített időpontú bejegyzések közé', + 'dayplan.cannotBreakChronology': 'Ez megbontaná az időzített elemek és foglalások időrendi sorrendjét', + + // Helyek oldalsáv + 'places.addPlace': 'Hely/Tevékenység hozzáadása', + 'places.importGpx': 'GPX importálás', + 'places.gpxImported': '{count} hely importálva GPX-ből', + 'places.urlResolved': 'Hely importálva URL-ből', + 'places.gpxError': 'GPX importálás sikertelen', + 'places.assignToDay': 'Melyik naphoz adod?', + 'places.all': 'Összes', + 'places.unplanned': 'Nem tervezett', + 'places.search': 'Helyek keresése...', + 'places.allCategories': 'Összes kategória', + 'places.categoriesSelected': 'kategória', + 'places.clearFilter': 'Szűrő törlése', + 'places.count': '{count} hely', + 'places.countSingular': '1 hely', + 'places.allPlanned': 'Minden hely be van tervezve', + 'places.noneFound': 'Nem találhatók helyek', + 'places.editPlace': 'Hely szerkesztése', + 'places.formName': 'Név', + 'places.formNamePlaceholder': 'pl. Eiffel-torony', + 'places.formDescription': 'Leírás', + 'places.formDescriptionPlaceholder': 'Rövid leírás...', + 'places.formAddress': 'Cím', + 'places.formAddressPlaceholder': 'Utca, Város, Ország', + 'places.formLat': 'Szélességi fok (pl. 48.8566)', + 'places.formLng': 'Hosszúsági fok (pl. 2.3522)', + 'places.formCategory': 'Kategória', + 'places.noCategory': 'Nincs kategória', + 'places.categoryNamePlaceholder': 'Kategória neve', + 'places.formTime': 'Időpont', + 'places.startTime': 'Kezdés', + 'places.endTime': 'Befejezés', + 'places.endTimeBeforeStart': 'A befejezési idő a kezdési idő előtt van', + 'places.timeCollision': 'Időbeli átfedés:', + 'places.formWebsite': 'Weboldal', + 'places.formNotesPlaceholder': 'Személyes jegyzetek...', + 'places.formReservation': 'Foglalás', + 'places.reservationNotesPlaceholder': 'Foglalási jegyzetek, visszaigazolási szám...', + 'places.mapsSearchPlaceholder': 'Helyek keresése...', + 'places.mapsSearchError': 'Helykeresés sikertelen.', + 'places.osmHint': 'OpenStreetMap keresés aktív (képek, nyitvatartás és értékelések nélkül). Bővített adatokhoz add meg a Google API kulcsot a beállításokban.', + 'places.osmActive': 'Keresés OpenStreetMap-en keresztül (képek, értékelések és nyitvatartás nélkül). Bővített adatokhoz add meg a Google API kulcsot a beállításokban.', + 'places.categoryCreateError': 'Nem sikerült létrehozni a kategóriát', + 'places.nameRequired': 'Kérjük, adj meg egy nevet', + 'places.saveError': 'Nem sikerült menteni', + // Hely részletek + 'inspector.opened': 'Nyitva', + 'inspector.closed': 'Zárva', + 'inspector.openingHours': 'Nyitvatartás', + 'inspector.showHours': 'Nyitvatartás megjelenítése', + 'inspector.files': 'Fájlok', + 'inspector.filesCount': '{count} fájl', + 'inspector.removeFromDay': 'Eltávolítás a napról', + 'inspector.addToDay': 'Hozzáadás a naphoz', + 'inspector.confirmedRes': 'Megerősített foglalás', + 'inspector.pendingRes': 'Függőben lévő foglalás', + 'inspector.google': 'Megnyitás a Google Térképben', + 'inspector.website': 'Weboldal megnyitása', + 'inspector.addRes': 'Foglalás', + 'inspector.editRes': 'Foglalás szerkesztése', + 'inspector.participants': 'Résztvevők', + + // Foglalások + 'reservations.title': 'Foglalások', + 'reservations.empty': 'Még nincsenek foglalások', + 'reservations.emptyHint': 'Adj hozzá foglalásokat repülőkhöz, szállodákhoz és egyebekhez', + 'reservations.add': 'Foglalás hozzáadása', + 'reservations.addManual': 'Kézi foglalás', + 'reservations.placeHint': 'Tipp: A foglalásokat legjobb közvetlenül egy helyről létrehozni, hogy összekapcsolódjon a napi tervvel.', + 'reservations.confirmed': 'Megerősítve', + 'reservations.pending': 'Függőben', + 'reservations.summary': '{confirmed} megerősítve, {pending} függőben', + 'reservations.fromPlan': 'Tervből', + 'reservations.showFiles': 'Fájlok megjelenítése', + 'reservations.editTitle': 'Foglalás szerkesztése', + 'reservations.status': 'Állapot', + 'reservations.datetime': 'Dátum és idő', + 'reservations.startTime': 'Kezdési idő', + 'reservations.endTime': 'Befejezési idő', + 'reservations.date': 'Dátum', + 'reservations.time': 'Időpont', + 'reservations.timeAlt': 'Időpont (alternatív, pl. 19:30)', + 'reservations.linkExisting': 'Meglévő fájl csatolása', + 'reservations.notes': 'Jegyzetek', + 'reservations.notesPlaceholder': 'További jegyzetek...', + 'reservations.meta.airline': 'Légitársaság', + 'reservations.meta.flightNumber': 'Járatszám', + 'reservations.meta.from': 'Honnan', + 'reservations.meta.to': 'Hová', + 'reservations.meta.trainNumber': 'Vonatszám', + 'reservations.meta.platform': 'Vágány', + 'reservations.meta.seat': 'Ülés', + 'reservations.meta.checkIn': 'Bejelentkezés', + 'reservations.meta.checkOut': 'Kijelentkezés', + 'reservations.meta.linkAccommodation': 'Szállás', + 'reservations.meta.pickAccommodation': 'Szállás hozzárendelése', + 'reservations.meta.noAccommodation': 'Nincs', + 'reservations.meta.hotelPlace': 'Szálloda', + 'reservations.meta.pickHotel': 'Szálloda kiválasztása', + 'reservations.meta.fromDay': 'Ettől', + 'reservations.meta.toDay': 'Eddig', + 'reservations.meta.selectDay': 'Nap kiválasztása', + 'reservations.type.flight': 'Repülő', + 'reservations.type.hotel': 'Szálloda', + 'reservations.type.restaurant': 'Étterem', + 'reservations.type.train': 'Vonat', + 'reservations.type.car': 'Autóbérlés', + 'reservations.type.cruise': 'Hajóút', + 'reservations.type.event': 'Esemény', + 'reservations.type.tour': 'Túra', + 'reservations.type.other': 'Egyéb', + 'reservations.confirm.delete': 'Biztosan törölni szeretnéd a(z) "{name}" foglalást?', + 'reservations.confirm.deleteTitle': 'Foglalás törlése?', + 'reservations.confirm.deleteBody': '"{name}" véglegesen törlődik.', + 'reservations.toast.updated': 'Foglalás frissítve', + 'reservations.toast.removed': 'Foglalás törölve', + 'reservations.toast.fileUploaded': 'Fájl feltöltve', + 'reservations.toast.uploadError': 'Feltöltés sikertelen', + 'reservations.newTitle': 'Új foglalás', + 'reservations.bookingType': 'Foglalás típusa', + 'reservations.titleLabel': 'Cím', + 'reservations.titlePlaceholder': 'pl. Lufthansa LH123, Hotel Adlon, ...', + 'reservations.locationAddress': 'Helyszín / Cím', + 'reservations.locationPlaceholder': 'Cím, Repülőtér, Szálloda...', + 'reservations.confirmationCode': 'Foglalási kód', + 'reservations.confirmationPlaceholder': 'pl. ABC12345', + 'reservations.day': 'Nap', + 'reservations.noDay': 'Nincs nap', + 'reservations.place': 'Hely', + 'reservations.noPlace': 'Nincs hely', + 'reservations.pendingSave': 'mentés…', + 'reservations.uploading': 'Feltöltés...', + 'reservations.attachFile': 'Fájl csatolása', + 'reservations.toast.saveError': 'Nem sikerült menteni', + 'reservations.toast.updateError': 'Nem sikerült frissíteni', + 'reservations.toast.deleteError': 'Nem sikerült törölni', + 'reservations.confirm.remove': '"{name}" foglalás eltávolítása?', + 'reservations.linkAssignment': 'Összekapcsolás napi tervvel', + 'reservations.pickAssignment': 'Válassz hozzárendelést a tervedből...', + 'reservations.noAssignment': 'Nincs összekapcsolás (önálló)', + + // Költségvetés + 'budget.title': 'Költségvetés', + 'budget.emptyTitle': 'Még nincs költségvetés létrehozva', + 'budget.emptyText': 'Hozz létre kategóriákat és bejegyzéseket az utazási költségvetés tervezéséhez', + 'budget.emptyPlaceholder': 'Kategória neve...', + 'budget.createCategory': 'Kategória létrehozása', + 'budget.category': 'Kategória', + 'budget.categoryName': 'Kategória neve', + 'budget.table.name': 'Név', + 'budget.table.total': 'Összesen', + 'budget.table.persons': 'Személyek', + 'budget.table.days': 'nap', + 'budget.table.perPerson': 'Személyenként', + 'budget.table.perDay': 'Naponta', + 'budget.table.perPersonDay': 'Fő / Nap', + 'budget.table.note': 'Megjegyzés', + 'budget.newEntry': 'Új bejegyzés', + 'budget.defaultEntry': 'Új bejegyzés', + 'budget.defaultCategory': 'Új kategória', + 'budget.total': 'Összesen', + 'budget.totalBudget': 'Teljes költségvetés', + 'budget.byCategory': 'Kategóriánként', + 'budget.editTooltip': 'Kattints a szerkesztéshez', + 'budget.confirm.deleteCategory': 'Biztosan törölni szeretnéd a(z) "{name}" kategóriát {count} bejegyzéssel?', + 'budget.deleteCategory': 'Kategória törlése', + 'budget.perPerson': 'Személyenként', + 'budget.paid': 'Fizetve', + 'budget.open': 'Nyitott', + 'budget.noMembers': 'Nincsenek résztvevők hozzárendelve', + 'budget.settlement': 'Elszámolás', + 'budget.settlementInfo': 'Kattints egy tag avatárjára egy költségvetési tételen a zöld jelöléshez — ez azt jelenti, hogy fizetett. Az elszámolás ezután mutatja, ki kinek mennyivel tartozik.', + 'budget.netBalances': 'Nettó egyenlegek', + + // Fájlok + 'files.title': 'Fájlok', + 'files.count': '{count} fájl', + 'files.countSingular': '1 fájl', + 'files.uploaded': '{count} feltöltve', + 'files.uploadError': 'Feltöltés sikertelen', + 'files.dropzone': 'Húzd ide a fájlokat', + 'files.dropzoneHint': 'vagy kattints a böngészéshez', + 'files.allowedTypes': 'Képek, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB', + 'files.uploading': 'Feltöltés...', + 'files.filterAll': 'Összes', + 'files.filterPdf': 'PDF-ek', + 'files.filterImages': 'Képek', + 'files.filterDocs': 'Dokumentumok', + 'files.filterCollab': 'Közös jegyzetek', + 'files.sourceCollab': 'Közös jegyzetekből', + 'files.empty': 'Még nincsenek fájlok', + 'files.emptyHint': 'Tölts fel fájlokat az utazásodhoz', + 'files.openTab': 'Megnyitás új lapon', + 'files.confirm.delete': 'Biztosan törölni szeretnéd ezt a fájlt?', + 'files.toast.deleted': 'Fájl törölve', + 'files.toast.deleteError': 'Nem sikerült törölni a fájlt', + 'files.sourcePlan': 'Napi terv', + 'files.sourceBooking': 'Foglalás', + 'files.attach': 'Csatolás', + 'files.pasteHint': 'Képeket a vágólapról is beillesztheted (Ctrl+V)', + 'files.trash': 'Kuka', + 'files.trashEmpty': 'A kuka üres', + 'files.emptyTrash': 'Kuka ürítése', + 'files.restore': 'Visszaállítás', + 'files.star': 'Csillag', + 'files.unstar': 'Csillag eltávolítása', + 'files.assign': 'Hozzárendelés', + 'files.assignTitle': 'Fájl hozzárendelése', + 'files.assignPlace': 'Hely', + 'files.assignBooking': 'Foglalás', + 'files.unassigned': 'Nincs hozzárendelve', + 'files.unlink': 'Kapcsolat eltávolítása', + 'files.toast.trashed': 'Kukába helyezve', + 'files.toast.restored': 'Fájl visszaállítva', + 'files.toast.trashEmptied': 'Kuka kiürítve', + 'files.toast.assigned': 'Fájl hozzárendelve', + 'files.toast.assignError': 'Hozzárendelés sikertelen', + 'files.toast.restoreError': 'Visszaállítás sikertelen', + 'files.confirm.permanentDelete': 'Véglegesen törlöd ezt a fájlt? Ez nem vonható vissza.', + 'files.confirm.emptyTrash': 'Véglegesen törlöd az összes kukába helyezett fájlt? Ez nem vonható vissza.', + 'files.noteLabel': 'Megjegyzés', + 'files.notePlaceholder': 'Megjegyzés hozzáadása...', + + // Csomagolás + 'packing.title': 'Csomagolási lista', + 'packing.empty': 'A csomagolási lista üres', + 'packing.import': 'Importálás', + 'packing.importTitle': 'Csomagolási lista importálása', + 'packing.importHint': 'Soronként egy tétel. Formátum: Kategória, Név, Súly g-ban (opcionális), Táska (opcionális), checked/unchecked (opcionális)', + 'packing.importPlaceholder': 'Tisztálkodás, Fogkefe\nRuházat, Pólók, 200\nDokumentumok, Útlevél, , Kézipoggyász\nElektronika, Töltő, 50, Bőrönd, checked', + 'packing.importCsv': 'CSV/TXT betöltése', + 'packing.importAction': '{count} importálása', + 'packing.importSuccess': '{count} tétel importálva', + 'packing.importError': 'Importálás sikertelen', + 'packing.importEmpty': 'Nincsenek importálható tételek', + 'packing.progress': '{packed} / {total} becsomagolva ({percent}%)', + 'packing.clearChecked': '{count} kipipált eltávolítása', + 'packing.clearCheckedShort': '{count} eltávolítása', + 'packing.suggestions': 'Javaslatok', + 'packing.suggestionsTitle': 'Javaslatok hozzáadása', + 'packing.allSuggested': 'Minden javaslat hozzáadva', + 'packing.allPacked': 'Minden be van csomagolva!', + 'packing.addPlaceholder': 'Új tárgy hozzáadása...', + 'packing.categoryPlaceholder': 'Kategória...', + 'packing.filterAll': 'Összes', + 'packing.filterOpen': 'Nyitott', + 'packing.filterDone': 'Kész', + 'packing.emptyTitle': 'A csomagolási lista üres', + 'packing.emptyHint': 'Adj hozzá tárgyakat vagy használd a javaslatokat', + 'packing.emptyFiltered': 'Nincs elem ebben a szűrőben', + 'packing.menuRename': 'Átnevezés', + 'packing.menuCheckAll': 'Összes kipipálása', + 'packing.menuUncheckAll': 'Összes jelölés törlése', + 'packing.menuDeleteCat': 'Kategória törlése', + 'packing.assignUser': 'Felhasználó hozzárendelése', + 'packing.noMembers': 'Nincsenek utazási tagok', + 'packing.addItem': 'Tétel hozzáadása', + 'packing.addItemPlaceholder': 'Tétel neve...', + 'packing.addCategory': 'Kategória hozzáadása', + 'packing.newCategoryPlaceholder': 'Kategória neve (pl. Ruházat)', + 'packing.applyTemplate': 'Sablon alkalmazása', + 'packing.template': 'Sablon', + 'packing.templateApplied': '{count} tétel hozzáadva a sablonból', + 'packing.templateError': 'Nem sikerült alkalmazni a sablont', + 'packing.bags': 'Táskák', + 'packing.noBag': 'Nincs hozzárendelve', + 'packing.totalWeight': 'Összsúly', + 'packing.bagName': 'Táska neve...', + 'packing.addBag': 'Táska hozzáadása', + 'packing.changeCategory': 'Kategória módosítása', + 'packing.confirm.clearChecked': 'Biztosan el szeretnéd távolítani a(z) {count} kipipált tárgyat?', + 'packing.confirm.deleteCat': 'Biztosan törölni szeretnéd a(z) "{name}" kategóriát {count} tárggyal?', + 'packing.defaultCategory': 'Egyéb', + 'packing.toast.saveError': 'Nem sikerült menteni', + 'packing.toast.deleteError': 'Nem sikerült törölni', + 'packing.toast.renameError': 'Nem sikerült átnevezni', + 'packing.toast.addError': 'Nem sikerült hozzáadni', + + // Csomagolási javaslatok + 'packing.suggestions.items': [ + { name: 'Útlevél', category: 'Dokumentumok' }, + { name: 'Személyi igazolvány', category: 'Dokumentumok' }, + { name: 'Utazási biztosítás', category: 'Dokumentumok' }, + { name: 'Repülőjegyek', category: 'Dokumentumok' }, + { name: 'Bankkártya', category: 'Pénzügyek' }, + { name: 'Készpénz', category: 'Pénzügyek' }, + { name: 'Vízum', category: 'Dokumentumok' }, + { name: 'Pólók', category: 'Ruházat' }, + { name: 'Nadrágok', category: 'Ruházat' }, + { name: 'Fehérnemű', category: 'Ruházat' }, + { name: 'Zoknik', category: 'Ruházat' }, + { name: 'Kabát', category: 'Ruházat' }, + { name: 'Hálóruha', category: 'Ruházat' }, + { name: 'Fürdőruha', category: 'Ruházat' }, + { name: 'Esőkabát', category: 'Ruházat' }, + { name: 'Kényelmes cipő', category: 'Ruházat' }, + { name: 'Fogkefe', category: 'Tisztálkodás' }, + { name: 'Fogkrém', category: 'Tisztálkodás' }, + { name: 'Sampon', category: 'Tisztálkodás' }, + { name: 'Dezodor', category: 'Tisztálkodás' }, + { name: 'Naptej', category: 'Tisztálkodás' }, + { name: 'Borotva', category: 'Tisztálkodás' }, + { name: 'Töltő', category: 'Elektronika' }, + { name: 'Powerbank', category: 'Elektronika' }, + { name: 'Fejhallgató', category: 'Elektronika' }, + { name: 'Úti adapter', category: 'Elektronika' }, + { name: 'Fényképezőgép', category: 'Elektronika' }, + { name: 'Fájdalomcsillapító', category: 'Egészség' }, + { name: 'Ragtapasz', category: 'Egészség' }, + { name: 'Fertőtlenítőszer', category: 'Egészség' }, + ], + + // Tagok / Megosztás + 'members.shareTrip': 'Utazás megosztása', + 'members.inviteUser': 'Felhasználó meghívása', + 'members.selectUser': 'Felhasználó kiválasztása…', + 'members.invite': 'Meghívás', + 'members.allHaveAccess': 'Minden felhasználónak már van hozzáférése.', + 'members.access': 'Hozzáférés', + 'members.person': 'személy', + 'members.persons': 'személy', + 'members.you': 'te', + 'members.owner': 'Tulajdonos', + 'members.leaveTrip': 'Utazás elhagyása', + 'members.removeAccess': 'Hozzáférés eltávolítása', + 'members.confirmLeave': 'Elhagyod az utazást? Elveszíted a hozzáférést.', + 'members.confirmRemove': 'Eltávolítod a hozzáférést ettől a felhasználótól?', + 'members.loadError': 'Nem sikerült betölteni a tagokat', + 'members.added': 'hozzáadva', + 'members.addError': 'Nem sikerült hozzáadni', + 'members.removed': 'Tag eltávolítva', + 'members.removeError': 'Nem sikerült eltávolítani', + + // Kategóriák (Admin) + 'categories.title': 'Kategóriák', + 'categories.subtitle': 'Helyek kategóriáinak kezelése', + 'categories.new': 'Új kategória', + 'categories.empty': 'Még nincsenek kategóriák', + 'categories.namePlaceholder': 'Kategória neve', + 'categories.icon': 'Ikon', + 'categories.color': 'Szín', + 'categories.customColor': 'Egyéni szín kiválasztása', + 'categories.preview': 'Előnézet', + 'categories.defaultName': 'Kategória', + 'categories.update': 'Frissítés', + 'categories.create': 'Létrehozás', + 'categories.confirm.delete': 'Kategória törlése? Az ebben a kategóriában lévő helyek nem törlődnek.', + 'categories.toast.loadError': 'Nem sikerült betölteni a kategóriákat', + 'categories.toast.nameRequired': 'Kérjük, adj meg egy nevet', + 'categories.toast.updated': 'Kategória frissítve', + 'categories.toast.created': 'Kategória létrehozva', + 'categories.toast.saveError': 'Nem sikerült menteni', + 'categories.toast.deleted': 'Kategória törölve', + 'categories.toast.deleteError': 'Nem sikerült törölni', + + // Biztonsági mentés (Admin) + 'backup.title': 'Adatmentés', + 'backup.subtitle': 'Adatbázis és minden feltöltött fájl', + 'backup.refresh': 'Frissítés', + 'backup.upload': 'Mentés feltöltése', + 'backup.uploading': 'Feltöltés…', + 'backup.create': 'Mentés készítése', + 'backup.creating': 'Készítés…', + 'backup.empty': 'Még nincsenek mentések', + 'backup.createFirst': 'Első mentés készítése', + 'backup.download': 'Letöltés', + 'backup.restore': 'Visszaállítás', + 'backup.confirm.restore': '"{name}" mentés visszaállítása?\n\nMinden jelenlegi adat a mentéssel lesz helyettesítve.', + 'backup.confirm.uploadRestore': '"{name}" mentésfájl feltöltése és visszaállítása?\n\nMinden jelenlegi adat felülíródik.', + 'backup.confirm.delete': '"{name}" mentés törlése?', + 'backup.toast.loadError': 'Nem sikerült betölteni a mentéseket', + 'backup.toast.created': 'Mentés sikeresen létrehozva', + 'backup.toast.createError': 'Nem sikerült létrehozni a mentést', + 'backup.toast.restored': 'Mentés visszaállítva. Az oldal újratöltődik…', + 'backup.toast.restoreError': 'Nem sikerült visszaállítani', + 'backup.toast.uploadError': 'Nem sikerült feltölteni', + 'backup.toast.deleted': 'Mentés törölve', + 'backup.toast.deleteError': 'Nem sikerült törölni', + 'backup.toast.downloadError': 'Letöltés sikertelen', + 'backup.toast.settingsSaved': 'Automatikus mentés beállításai mentve', + 'backup.toast.settingsError': 'Nem sikerült menteni a beállításokat', + 'backup.auto.title': 'Automatikus mentés', + 'backup.auto.subtitle': 'Automatikus mentés ütemezés szerint', + 'backup.auto.enable': 'Automatikus mentés engedélyezése', + 'backup.auto.enableHint': 'A mentések automatikusan készülnek a választott ütemezés szerint', + 'backup.auto.interval': 'Időköz', + 'backup.auto.hour': 'Futtatás időpontja', + 'backup.auto.hourHint': 'Szerver helyi ideje ({format} formátum)', + 'backup.auto.dayOfWeek': 'A hét napja', + 'backup.auto.dayOfMonth': 'A hónap napja', + 'backup.auto.dayOfMonthHint': '1–28-ra korlátozva az összes hónappal való kompatibilitás érdekében', + 'backup.auto.scheduleSummary': 'Ütemezés', + 'backup.auto.summaryDaily': 'Minden nap {hour}:00-kor', + 'backup.auto.summaryWeekly': 'Minden {day} {hour}:00-kor', + 'backup.auto.summaryMonthly': 'Minden hónap {day}. napján {hour}:00-kor', + 'backup.auto.envLocked': 'Docker', + 'backup.auto.envLockedHint': 'Az automatikus mentés Docker környezeti változókon keresztül van konfigurálva. A beállítások módosításához frissítsd a docker-compose.yml fájlt és indítsd újra a konténert.', + 'backup.auto.copyEnv': 'Docker env változók másolása', + 'backup.auto.envCopied': 'Docker env változók vágólapra másolva', + 'backup.auto.keepLabel': 'Régi mentések törlése ennyi idő után', + 'backup.dow.sunday': 'Va', + 'backup.dow.monday': 'Hé', + 'backup.dow.tuesday': 'Ke', + 'backup.dow.wednesday': 'Sze', + 'backup.dow.thursday': 'Csü', + 'backup.dow.friday': 'Pé', + 'backup.dow.saturday': 'Szo', + 'backup.interval.hourly': 'Óránként', + 'backup.interval.daily': 'Naponta', + 'backup.interval.weekly': 'Hetente', + 'backup.interval.monthly': 'Havonta', + 'backup.keep.1day': '1 nap', + 'backup.keep.3days': '3 nap', + 'backup.keep.7days': '7 nap', + 'backup.keep.14days': '14 nap', + 'backup.keep.30days': '30 nap', + 'backup.keep.forever': 'Örökre megőrzés', + + // Fotók + 'photos.allDays': 'Minden nap', + 'photos.noPhotos': 'Még nincsenek fotók', + 'photos.uploadHint': 'Töltsd fel az úti fotóidat', + 'photos.clickToSelect': 'vagy kattints a kiválasztáshoz', + 'photos.linkPlace': 'Hely társítása', + 'photos.noPlace': 'Nincs hely', + 'photos.uploadN': '{n} fotó feltöltése', + + // Mentés visszaállítása modal + 'backup.restoreConfirmTitle': 'Mentés visszaállítása?', + 'backup.restoreWarning': 'Minden jelenlegi adat (utazások, helyek, felhasználók, feltöltések) véglegesen lecserélődik a mentéssel. Ez a művelet nem vonható vissza.', + 'backup.restoreTip': 'Tipp: Készíts mentést a jelenlegi állapotról a visszaállítás előtt.', + 'backup.restoreConfirm': 'Igen, visszaállítás', + + // PDF + 'pdf.travelPlan': 'Utazási terv', + 'pdf.planned': 'Tervezett', + 'pdf.costLabel': 'Költség', + 'pdf.preview': 'PDF előnézet', + 'pdf.saveAsPdf': 'Mentés PDF-ként', + + // Tervező + 'planner.places': 'Helyek', + 'planner.bookings': 'Foglalások', + 'planner.packingList': 'Csomagolási lista', + 'planner.documents': 'Dokumentumok', + 'planner.dayPlan': 'Napi terv', + 'planner.reservations': 'Foglalások', + 'planner.minTwoPlaces': 'Legalább 2 koordinátákkal rendelkező hely szükséges', + 'planner.noGeoPlaces': 'Nincsenek koordinátákkal rendelkező helyek', + 'planner.routeCalculated': 'Útvonal kiszámítva', + 'planner.routeCalcFailed': 'Nem sikerült kiszámítani az útvonalat', + 'planner.routeError': 'Hiba az útvonalszámítás során', + 'planner.routeOptimized': 'Útvonal optimalizálva', + 'planner.reservationUpdated': 'Foglalás frissítve', + 'planner.reservationAdded': 'Foglalás hozzáadva', + 'planner.confirmDeleteReservation': 'Foglalás törlése?', + 'planner.reservationDeleted': 'Foglalás törölve', + 'planner.days': 'nap', + 'planner.allPlaces': 'Összes hely', + 'planner.totalPlaces': 'Összesen {n} hely', + 'planner.noDaysPlanned': 'Még nincsenek napok tervezve', + 'planner.editTrip': 'Utazás szerkesztése \u2192', + 'planner.placeOne': '1 hely', + 'planner.placeN': '{n} hely', + 'planner.addNote': 'Jegyzet hozzáadása', + 'planner.noEntries': 'Nincsenek bejegyzések erre a napra', + 'planner.addPlace': 'Hely/tevékenység hozzáadása', + 'planner.addPlaceShort': '+ Hely/tevékenység hozzáadása', + 'planner.resPending': 'Foglalás függőben · ', + 'planner.resConfirmed': 'Foglalás megerősítve · ', + 'planner.notePlaceholder': 'Jegyzet\u2026', + 'planner.noteTimePlaceholder': 'Időpont (opcionális)', + 'planner.noteExamplePlaceholder': 'pl. S3 14:30-kor a főpályaudvarról, komp a 7. mólóról, ebédszünet\u2026', + 'planner.totalCost': 'Összköltség', + 'planner.searchPlaces': 'Helyek keresése\u2026', + 'planner.allCategories': 'Összes kategória', + 'planner.noPlacesFound': 'Nem találhatók helyek', + 'planner.addFirstPlace': 'Első hely hozzáadása', + 'planner.noReservations': 'Nincsenek foglalások', + 'planner.addFirstReservation': 'Első foglalás hozzáadása', + 'planner.new': 'Új', + 'planner.addToDay': '+ Nap', + 'planner.calculating': 'Számítás\u2026', + 'planner.route': 'Útvonal', + 'planner.optimize': 'Optimalizálás', + 'planner.openGoogleMaps': 'Megnyitás a Google Térképben', + 'planner.selectDayHint': 'Válassz egy napot a bal oldali listából a napi terv megtekintéséhez', + 'planner.noPlacesForDay': 'Még nincsenek helyek erre a napra', + 'planner.addPlacesLink': 'Helyek hozzáadása \u2192', + 'planner.minTotal': 'perc összesen', + 'planner.noReservation': 'Nincs foglalás', + 'planner.removeFromDay': 'Eltávolítás a napról', + 'planner.addToThisDay': 'Hozzáadás a naphoz', + 'planner.overview': 'Áttekintés', + 'planner.noDays': 'Még nincsenek napok', + 'planner.editTripToAddDays': 'Szerkeszd az utazást napok hozzáadásához', + 'planner.dayCount': '{n} nap', + 'planner.clickToUnlock': 'Kattints a feloldáshoz', + 'planner.keepPosition': 'Pozíció megtartása útvonal-optimalizálás során', + 'planner.dayDetails': 'Nap részletei', + 'planner.dayN': '{n}. nap', + + // Irányítópult statisztikák + 'stats.countries': 'Országok', + 'stats.cities': 'Városok', + 'stats.trips': 'Utazások', + 'stats.places': 'Helyek', + 'stats.worldProgress': 'Világ felfedezése', + 'stats.visited': 'meglátogatott', + 'stats.remaining': 'hátralévő', + 'stats.visitedCountries': 'Meglátogatott országok', + + // Nap részletei panel + 'day.precipProb': 'Csapadékvalószínűség', + 'day.precipitation': 'Csapadék', + 'day.wind': 'Szél', + 'day.sunrise': 'Napkelte', + 'day.sunset': 'Napnyugta', + 'day.hourlyForecast': 'Óránkénti előrejelzés', + 'day.climateHint': 'Történelmi átlagok — valós előrejelzés a dátum előtti 16 napon belül érhető el.', + 'day.noWeather': 'Nem állnak rendelkezésre időjárási adatok. Adj hozzá egy helyet koordinátákkal.', + 'day.overview': 'Napi áttekintés', + 'day.accommodation': 'Szállás', + 'day.addAccommodation': 'Szállás hozzáadása', + 'day.hotelDayRange': 'Alkalmazás napokra', + 'day.noPlacesForHotel': 'Először adj hozzá helyeket az utazásodhoz', + 'day.allDays': 'Összes', + 'day.checkIn': 'Bejelentkezés', + 'day.checkOut': 'Kijelentkezés', + 'day.confirmation': 'Visszaigazolás', + 'day.editAccommodation': 'Szállás szerkesztése', + 'day.reservations': 'Foglalások', + + // Collab bővítmény + 'collab.tabs.chat': 'Csevegés', + 'collab.tabs.notes': 'Jegyzetek', + 'collab.tabs.polls': 'Szavazások', + 'collab.whatsNext.title': 'Mi következik', + 'collab.whatsNext.today': 'Ma', + 'collab.whatsNext.tomorrow': 'Holnap', + 'collab.whatsNext.empty': 'Nincsenek közelgő tevékenységek', + 'collab.whatsNext.until': '-ig', + 'collab.whatsNext.emptyHint': 'Az időponttal rendelkező tevékenységek itt jelennek meg', + 'collab.chat.send': 'Küldés', + 'collab.chat.placeholder': 'Üzenet írása...', + 'collab.chat.empty': 'Kezdd el a beszélgetést', + 'collab.chat.emptyHint': 'Az üzenetek az utazás minden tagjával meg vannak osztva', + 'collab.chat.emptyDesc': 'Oszd meg ötleteidet, terveidet és híreidet az utazócsoportoddal', + 'collab.chat.today': 'Ma', + 'collab.chat.yesterday': 'Tegnap', + 'collab.chat.deletedMessage': 'törölt egy üzenetet', + 'collab.chat.loadMore': 'Korábbi üzenetek betöltése', + 'collab.chat.justNow': 'éppen most', + 'collab.chat.minutesAgo': '{n} perce', + 'collab.chat.hoursAgo': '{n} órája', + 'collab.notes.title': 'Jegyzetek', + 'collab.notes.new': 'Új jegyzet', + 'collab.notes.empty': 'Még nincsenek jegyzetek', + 'collab.notes.emptyHint': 'Rögzítsd az ötleteidet és terveidet', + 'collab.notes.all': 'Összes', + 'collab.notes.titlePlaceholder': 'Jegyzet címe', + 'collab.notes.contentPlaceholder': 'Írj valamit...', + 'collab.notes.categoryPlaceholder': 'Kategória', + 'collab.notes.newCategory': 'Új kategória...', + 'collab.notes.category': 'Kategória', + 'collab.notes.noCategory': 'Nincs kategória', + 'collab.notes.color': 'Szín', + 'collab.notes.save': 'Mentés', + 'collab.notes.cancel': 'Mégse', + 'collab.notes.edit': 'Szerkesztés', + 'collab.notes.delete': 'Törlés', + 'collab.notes.pin': 'Kitűzés', + 'collab.notes.unpin': 'Kitűzés eltávolítása', + 'collab.notes.daysAgo': '{n} napja', + 'collab.notes.categorySettings': 'Kategóriák kezelése', + 'collab.notes.create': 'Létrehozás', + 'collab.notes.website': 'Weboldal', + 'collab.notes.websitePlaceholder': 'https://...', + 'collab.notes.attachFiles': 'Fájlok csatolása', + 'collab.notes.noCategoriesYet': 'Még nincsenek kategóriák', + 'collab.notes.emptyDesc': 'Hozz létre egy jegyzetet a kezdéshez', + 'collab.polls.title': 'Szavazások', + 'collab.polls.new': 'Új szavazás', + 'collab.polls.empty': 'Még nincsenek szavazások', + 'collab.polls.emptyHint': 'Kérdezd meg a csoportot és szavazzatok együtt', + 'collab.polls.question': 'Kérdés', + 'collab.polls.questionPlaceholder': 'Mit csináljunk?', + 'collab.polls.addOption': 'Opció hozzáadása', + 'collab.polls.optionPlaceholder': '{n}. opció', + 'collab.polls.create': 'Szavazás létrehozása', + 'collab.polls.close': 'Lezárás', + 'collab.polls.closed': 'Lezárva', + 'collab.polls.votes': '{n} szavazat', + 'collab.polls.vote': '{n} szavazat', + 'collab.polls.multipleChoice': 'Többszörös választás', + 'collab.polls.multiChoice': 'Többszörös választás', + 'collab.polls.deadline': 'Határidő', + 'collab.polls.option': 'Opció', + 'collab.polls.options': 'Opciók', + 'collab.polls.delete': 'Törlés', + 'collab.polls.closedSection': 'Lezárva', + + // Emlékek / Immich + 'memories.title': 'Fotók', + 'memories.notConnected': 'Immich nincs csatlakoztatva', + 'memories.notConnectedHint': 'Csatlakoztasd az Immich példányodat a Beállításokban, hogy itt lásd az utazási fotóidat.', + 'memories.noDates': 'Adj hozzá dátumokat az utazáshoz a fotók betöltéséhez.', + 'memories.noPhotos': 'Nem találhatók fotók', + 'memories.noPhotosHint': 'Nem találhatók fotók az Immichben erre az utazási időszakra.', + 'memories.photosFound': 'fotó', + 'memories.fromOthers': 'másoktól', + 'memories.sharePhotos': 'Fotók megosztása', + 'memories.sharing': 'Megosztás', + 'memories.reviewTitle': 'Nézd át a fotóidat', + 'memories.reviewHint': 'Kattints a fotókra a megosztásból való kizáráshoz.', + 'memories.shareCount': '{count} fotó megosztása', + 'memories.immichUrl': 'Immich szerver URL', + 'memories.immichApiKey': 'API kulcs', + 'memories.testConnection': 'Kapcsolat tesztelése', + 'memories.connected': 'Csatlakoztatva', + 'memories.disconnected': 'Nincs csatlakoztatva', + 'memories.connectionSuccess': 'Csatlakozva az Immichhez', + 'memories.connectionError': 'Nem sikerült csatlakozni az Immichhez', + 'memories.saved': 'Immich beállítások mentve', + 'memories.addPhotos': 'Fotók hozzáadása', + 'memories.selectPhotos': 'Fotók kiválasztása az Immichből', + 'memories.selectHint': 'Koppints a fotókra a kijelölésükhöz.', + 'memories.selected': 'kijelölve', + 'memories.addSelected': '{count} fotó hozzáadása', + 'memories.alreadyAdded': 'Hozzáadva', + 'memories.private': 'Privát', + 'memories.stopSharing': 'Megosztás leállítása', + 'memories.oldest': 'Legrégebbi elöl', + 'memories.newest': 'Legújabb elöl', + 'memories.allLocations': 'Összes helyszín', + 'memories.tripDates': 'Utazás dátumai', + 'memories.allPhotos': 'Összes fotó', + 'memories.confirmShareTitle': 'Megosztás az utazótársakkal?', + 'memories.confirmShareHint': '{count} fotó lesz látható az utazás összes tagja számára. Később egyenként is priváttá teheted őket.', + 'memories.confirmShareButton': 'Fotók megosztása', +} + +export default hu diff --git a/client/src/i18n/translations/it.ts b/client/src/i18n/translations/it.ts index 541a8bd..8727080 100644 --- a/client/src/i18n/translations/it.ts +++ b/client/src/i18n/translations/it.ts @@ -139,6 +139,16 @@ const it: Record = { 'settings.temperature': 'Unità di Temperatura', 'settings.timeFormat': 'Formato Ora', 'settings.routeCalculation': 'Calcolo Percorso', + 'settings.blurBookingCodes': 'Nascondi codici di prenotazione', + 'settings.notifications': 'Notifiche', + 'settings.notifyTripInvite': 'Inviti di viaggio', + 'settings.notifyBookingChange': 'Modifiche alle prenotazioni', + 'settings.notifyTripReminder': 'Promemoria di viaggio', + 'settings.notifyVacayInvite': 'Inviti fusione Vacay', + 'settings.notifyPhotosShared': 'Foto condivise (Immich)', + 'settings.notifyCollabMessage': 'Messaggi chat (Collab)', + 'settings.notifyPackingTagged': 'Lista valigia: assegnazioni', + 'settings.notifyWebhook': 'Notifiche webhook', 'settings.on': 'On', 'settings.off': 'Off', 'settings.account': 'Account', @@ -191,6 +201,40 @@ const it: Record = { 'settings.mfa.toastEnabled': 'Autenticazione a due fattori abilitata', 'settings.mfa.toastDisabled': 'Autenticazione a due fattori disabilitata', 'settings.mfa.demoBlocked': 'Non disponibile in modalità demo', + 'admin.smtp.title': 'Email e notifiche', + 'admin.smtp.hint': 'Configurazione SMTP per le notifiche via email. Opzionale: URL webhook per Discord, Slack, ecc.', + 'admin.smtp.testButton': 'Invia email di prova', + 'admin.smtp.testSuccess': 'Email di prova inviata con successo', + 'admin.smtp.testFailed': 'Invio email di prova fallito', + 'dayplan.icsTooltip': 'Esporta calendario (ICS)', + 'share.linkTitle': 'Link pubblico', + 'share.linkHint': 'Crea un link che chiunque può usare per visualizzare questo viaggio senza accedere. Solo lettura — nessuna modifica possibile.', + 'share.createLink': 'Crea link', + 'share.deleteLink': 'Elimina link', + 'share.createError': 'Impossibile creare il link', + 'common.copy': 'Copia', + 'common.copied': 'Copiato', + 'share.permMap': 'Mappa e programma', + 'share.permBookings': 'Prenotazioni', + 'share.permPacking': 'Valigia', + 'shared.expired': 'Link scaduto o non valido', + 'shared.expiredHint': 'Questo link di viaggio condiviso non è più attivo.', + 'shared.readOnly': 'Vista in sola lettura', + 'shared.tabPlan': 'Programma', + 'shared.tabBookings': 'Prenotazioni', + 'shared.tabPacking': 'Valigia', + 'shared.tabBudget': 'Budget', + 'shared.tabChat': 'Chat', + 'shared.days': 'giorni', + 'shared.places': 'luoghi', + 'shared.other': 'Altro', + 'shared.totalBudget': 'Budget totale', + 'shared.messages': 'messaggi', + 'shared.sharedVia': 'Condiviso tramite', + 'shared.confirmed': 'Confermato', + 'shared.pending': 'In attesa', + 'share.permBudget': 'Budget', + 'share.permCollab': 'Chat', // Login 'login.error': 'Accesso fallito. Controlla le tue credenziali.', @@ -373,8 +417,6 @@ const it: Record = { '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.memories.name': 'Ricordi', - 'admin.addons.catalog.memories.description': 'Album fotografici condivisi per ogni viaggio', 'admin.addons.catalog.packing.name': 'Lista valigia', 'admin.addons.catalog.packing.description': 'Checklist per preparare la valigia per ogni viaggio', 'admin.addons.catalog.budget.name': 'Budget', @@ -413,6 +455,20 @@ const it: Record = { 'admin.weather.requestsDesc': 'Gratis, nessuna chiave API richiesta', 'admin.weather.locationHint': 'Il meteo si basa sul primo luogo con coordinate di ogni giorno. Se a un giorno non è assegnato alcun luogo, viene utilizzato come riferimento un qualsiasi luogo dell\'elenco.', + 'admin.tabs.audit': 'Log di audit', + + 'admin.audit.subtitle': 'Eventi sensibili di sicurezza e amministrazione (backup, utenti, 2FA, impostazioni).', + 'admin.audit.empty': 'Nessuna voce di audit.', + 'admin.audit.refresh': 'Aggiorna', + 'admin.audit.loadMore': 'Carica altro', + 'admin.audit.showing': '{count} caricati · {total} totali', + 'admin.audit.col.time': 'Ora', + 'admin.audit.col.user': 'Utente', + 'admin.audit.col.action': 'Azione', + 'admin.audit.col.resource': 'Risorsa', + 'admin.audit.col.ip': 'IP', + 'admin.audit.col.details': 'Dettagli', + // GitHub 'admin.tabs.github': 'GitHub', 'admin.github.title': 'Cronologia rilasci', @@ -544,6 +600,9 @@ const it: Record = { 'atlas.markVisited': 'Segna come visitato', 'atlas.markVisitedHint': 'Aggiungi questo paese alla tua lista dei visitati', 'atlas.addToBucket': 'Aggiungi alla lista desideri', + 'atlas.addPoi': 'Aggiungi luogo', + 'atlas.bucketNamePlaceholder': 'Nome (paese, città, luogo...)', + 'atlas.month': 'Mese', 'atlas.addToBucketHint': 'Salvalo come luogo che vuoi visitare', 'atlas.bucketWhen': 'Quando pensi di visitarlo?', 'atlas.statsTab': 'Statistiche', @@ -629,14 +688,26 @@ const it: Record = { 'dayplan.pdf': 'PDF', 'dayplan.pdfTooltip': 'Esporta il programma del giorno come PDF', 'dayplan.pdfError': 'Impossibile esportare il PDF', + 'dayplan.cannotReorderTransport': 'Le prenotazioni con un orario fisso non possono essere riordinate', + 'dayplan.confirmRemoveTimeTitle': 'Rimuovere l\'orario?', + 'dayplan.confirmRemoveTimeBody': 'Questo luogo ha un orario fisso ({time}). Spostarlo rimuoverà l\'orario e consentirà l\'ordinamento libero.', + 'dayplan.confirmRemoveTimeAction': 'Rimuovi orario e sposta', + 'dayplan.cannotDropOnTimed': 'Gli elementi non possono essere posizionati tra voci con orario fisso', + 'dayplan.cannotBreakChronology': 'Ciò interromperebbe l\'ordine cronologico degli elementi e delle prenotazioni pianificati', // Places Sidebar 'places.addPlace': 'Aggiungi Luogo/Attività', + 'places.importGpx': 'Importa GPX', + 'places.gpxImported': '{count} luoghi importati da GPX', + 'places.urlResolved': 'Luogo importato dall\'URL', + 'places.gpxError': 'Importazione GPX non riuscita', 'places.assignToDay': 'A quale giorno aggiungere?', 'places.all': 'Tutti', 'places.unplanned': 'Non pianificati', 'places.search': 'Cerca luoghi...', 'places.allCategories': 'Tutte le categorie', + 'places.categoriesSelected': 'categorie', + 'places.clearFilter': 'Cancella filtro', 'places.count': '{count} luoghi', 'places.countSingular': '1 luogo', 'places.allPlanned': 'Tutti i luoghi sono programmati', @@ -735,6 +806,8 @@ const it: Record = { 'reservations.type.tour': 'Tour', 'reservations.type.other': 'Altro', 'reservations.confirm.delete': 'Sei sicuro di voler eliminare la prenotazione "{name}"?', + 'reservations.confirm.deleteTitle': 'Eliminare la prenotazione?', + 'reservations.confirm.deleteBody': '"{name}" verrà eliminato in modo permanente.', 'reservations.toast.updated': 'Prenotazione aggiornata', 'reservations.toast.removed': 'Prenotazione eliminata', 'reservations.toast.fileUploaded': 'File caricato', @@ -792,6 +865,9 @@ const it: Record = { 'budget.paid': 'Pagato', 'budget.open': 'Aperto', 'budget.noMembers': 'Nessun membro assegnato', + 'budget.settlement': 'Regolamento', + 'budget.settlementInfo': 'Clicca sull\'avatar di un membro su una voce di budget per contrassegnarlo in verde — significa che ha pagato. Il regolamento mostra poi chi deve quanto a chi.', + 'budget.netBalances': 'Saldi netti', // Files 'files.title': 'File', @@ -845,6 +921,15 @@ const it: Record = { // Packing 'packing.title': 'Lista valigia', 'packing.empty': 'La lista valigia è vuota', + 'packing.import': 'Importa', + 'packing.importTitle': 'Importa lista valigia', + 'packing.importHint': 'Un elemento per riga. Formato: Categoria, Nome, Peso in g (opzionale), Borsa (opzionale), checked/unchecked (opzionale)', + 'packing.importPlaceholder': 'Igiene, Spazzolino\nAbbigliamento, Magliette, 200\nDocumenti, Passaporto, , Bagaglio a mano\nElettronica, Caricabatterie, 50, Valigia, checked', + 'packing.importCsv': 'Carica CSV/TXT', + 'packing.importAction': 'Importa {count}', + 'packing.importSuccess': '{count} elementi importati', + 'packing.importError': 'Importazione non riuscita', + 'packing.importEmpty': 'Nessun elemento da importare', 'packing.progress': '{packed} di {total} in valigia ({percent}%)', 'packing.clearChecked': 'Rimuovi {count} spuntati', 'packing.clearCheckedShort': 'Rimuovi {count}', @@ -996,7 +1081,27 @@ const it: Record = { 'backup.auto.enable': 'Abilita auto-backup', 'backup.auto.enableHint': 'I backup verranno creati automaticamente in base alla pianificazione scelta', 'backup.auto.interval': 'Intervallo', + 'backup.auto.hour': 'Esegui all\'ora', + 'backup.auto.hourHint': 'Ora locale del server (formato {format})', + 'backup.auto.dayOfWeek': 'Giorno della settimana', + 'backup.auto.dayOfMonth': 'Giorno del mese', + 'backup.auto.dayOfMonthHint': 'Limitato a 1–28 per compatibilità con tutti i mesi', + 'backup.auto.scheduleSummary': 'Pianificazione', + 'backup.auto.summaryDaily': 'Ogni giorno alle {hour}:00', + 'backup.auto.summaryWeekly': 'Ogni {day} alle {hour}:00', + 'backup.auto.summaryMonthly': 'Giorno {day} di ogni mese alle {hour}:00', + 'backup.auto.envLocked': 'Docker', + 'backup.auto.envLockedHint': 'L\'auto-backup è configurato tramite variabili d\'ambiente Docker. Per modificare queste impostazioni, aggiorna il tuo docker-compose.yml e riavvia il container.', + 'backup.auto.copyEnv': 'Copia variabili env Docker', + 'backup.auto.envCopied': 'Variabili env Docker copiate negli appunti', 'backup.auto.keepLabel': 'Elimina i vecchi backup dopo', + 'backup.dow.sunday': 'Dom', + 'backup.dow.monday': 'Lun', + 'backup.dow.tuesday': 'Mar', + 'backup.dow.wednesday': 'Mer', + 'backup.dow.thursday': 'Gio', + 'backup.dow.friday': 'Ven', + 'backup.dow.saturday': 'Sab', 'backup.interval.hourly': 'Ogni ora', 'backup.interval.daily': 'Giornaliero', 'backup.interval.weekly': 'Settimanale',