feat: add Italian, Czech, Hungarian + sync all 12 languages
New languages: Italian (it), Czech (cs), Hungarian (hu) Merged PRs #158, #130, #119 with conflict resolution. All 12 language files synced to ~1238 keys each: ar, br, cs, de, en, es, fr, hu, it, nl, ru, zh Thanks @entropyst72 (Italian), @Numira-code (Czech), @slashwarm (Hungarian) for the translations!
This commit is contained in:
@@ -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<string, TranslationStrings> = { de, en, es, fr, ru, zh, nl, ar, br, cs }
|
||||
const LOCALES: Record<string, string> = { 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<string, TranslationStrings> = { de, en, es, fr, hu, it, ru, zh, nl, ar, br, cs }
|
||||
const LOCALES: Record<string, string> = { 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 {
|
||||
|
||||
@@ -455,6 +455,20 @@ const br: Record<string, string | { name: string; category: string }[]> = {
|
||||
'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',
|
||||
|
||||
@@ -17,7 +17,7 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
// 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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
// 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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
// 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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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',
|
||||
};
|
||||
'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
|
||||
|
||||
@@ -454,6 +454,20 @@ const fr: Record<string, string> = {
|
||||
'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',
|
||||
|
||||
1340
client/src/i18n/translations/hu.ts
Normal file
1340
client/src/i18n/translations/hu.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -139,6 +139,16 @@ const it: Record<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'admin.tabs.addons': 'Moduli',
|
||||
'admin.addons.title': 'Moduli',
|
||||
'admin.addons.subtitle': 'Abilita o disabilita le funzionalità per personalizzare la tua esperienza TREK.',
|
||||
'admin.addons.catalog.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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
'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<string, string | { name: string; category: string }[]> = {
|
||||
// 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<string, string | { name: string; category: string }[]> = {
|
||||
'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',
|
||||
|
||||
Reference in New Issue
Block a user