mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-23 07:11:46 +00:00
c0b5d941dd
When the backend or identity provider was unreachable, a returning user with a persisted session landed on the dashboard with an empty trip grid and no error. That looks identical to a logged-in user who simply has no trips, so people assumed their data had been lost. Three client-side layers were quietly swallowing the failure: the auth check only cleared state on a 401, so a 5xx or a network error left the stale session in place and kept rendering the protected route; the offline-first trip repo turned a failed fetch into the empty cache without throwing; and the dashboard had neither an error nor an empty state, so a blank grid meant both "outage" and "no trips". The auth check now tells genuine offline (keep serving the cache silently, the PWA happy path) apart from a server outage while online (keep the session but flag it). The dashboard shows a reassuring "couldn't reach the server, your trips are safe" banner with a retry, and a real zero-trip account finally gets a proper empty state so the two cases never look alike. New strings added across all locales.
167 lines
8.5 KiB
TypeScript
167 lines
8.5 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
||
|
||
const dashboard: TranslationStrings = {
|
||
'dashboard.title': 'Moje cesty',
|
||
'dashboard.subtitle.loading': 'Načítání cest...',
|
||
'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',
|
||
'dashboard.subtitle.archivedSuffix': ' · {count} archivováno',
|
||
'dashboard.newTrip': 'Nová cesta',
|
||
'dashboard.newTripSub': 'Naplánujte novou cestu od začátku',
|
||
'dashboard.gridView': 'Mřížka',
|
||
'dashboard.listView': 'Seznam',
|
||
'dashboard.currency': 'Měna',
|
||
'dashboard.timezone': 'Časová pásma',
|
||
'dashboard.localTime': 'Místní čas',
|
||
'dashboard.timezoneCustomTitle': 'Vlastní pásmo',
|
||
'dashboard.timezoneCustomLabelPlaceholder': 'Popisek (volitelné)',
|
||
'dashboard.timezoneCustomTzPlaceholder': 'např. America/New_York',
|
||
'dashboard.timezoneCustomAdd': 'Přidat',
|
||
'dashboard.timezoneCustomErrorEmpty': 'Zadejte identifikátor pásma',
|
||
'dashboard.timezoneCustomErrorInvalid': 'Neplatné pásmo. Použijte formát jako např. Europe/Prague',
|
||
'dashboard.timezoneCustomErrorDuplicate': 'Již bylo přidáno',
|
||
'dashboard.emptyTitle': 'Zatím žádné cesty',
|
||
'dashboard.emptyText': 'Vytvořte svou první cestu a začněte plánovat!',
|
||
'dashboard.emptyButton': 'Vytvořit první cestu',
|
||
'dashboard.nextTrip': 'Další cesta',
|
||
'dashboard.shared': 'Sdílené',
|
||
'dashboard.sharedBy': 'Sdílí {name}',
|
||
'dashboard.days': 'Dní',
|
||
'dashboard.places': 'Míst',
|
||
'dashboard.members': 'Cestovní parťáci',
|
||
'dashboard.archive': 'Archivovat',
|
||
'dashboard.copyTrip': 'Kopírovat',
|
||
'dashboard.copySuffix': 'kopie',
|
||
'dashboard.restore': 'Obnovit',
|
||
'dashboard.archived': 'Archivováno',
|
||
'dashboard.status.ongoing': 'Probíhající',
|
||
'dashboard.status.today': 'Dnes',
|
||
'dashboard.status.tomorrow': 'Zítra',
|
||
'dashboard.status.past': 'Proběhlé',
|
||
'dashboard.status.daysLeft': 'zbývá {count} dní',
|
||
'dashboard.toast.loadError': 'Nepodařilo se načíst cesty',
|
||
'dashboard.loadErrorBanner': 'Server nebyl dostupný. Vaše cesty jsou v bezpečí — zkuste to prosím znovu.',
|
||
'dashboard.retry': 'Zkusit znovu',
|
||
'dashboard.toast.created': 'Cesta byla úspěšně vytvořena!',
|
||
'dashboard.toast.createError': 'Nepodařilo se vytvořit cestu',
|
||
'dashboard.toast.updated': 'Cesta byla aktualizována!',
|
||
'dashboard.toast.updateError': 'Nepodařilo se aktualizovat cestu',
|
||
'dashboard.toast.deleted': 'Cesta byla smazána',
|
||
'dashboard.toast.deleteError': 'Nepodařilo se smazat cestu',
|
||
'dashboard.toast.archived': 'Cesta byla archivována',
|
||
'dashboard.toast.archiveError': 'Nepodařilo se archivovat cestu',
|
||
'dashboard.toast.restored': 'Cesta byla obnovena',
|
||
'dashboard.toast.restoreError': 'Nepodařilo se obnovit cestu',
|
||
'dashboard.toast.copied': 'Cesta byla zkopírována!',
|
||
'dashboard.toast.copyError': 'Nepodařilo se zkopírovat cestu',
|
||
'dashboard.confirm.delete': 'Smazat cestu „{title}”? Všechna místa a plány budou trvale smazány.',
|
||
'dashboard.editTrip': 'Upravit cestu',
|
||
'dashboard.createTrip': 'Vytvořit novou cestu',
|
||
'dashboard.tripTitle': 'Název',
|
||
'dashboard.tripTitlePlaceholder': 'např. Léto v Japonsku',
|
||
'dashboard.tripDescription': 'Popis',
|
||
'dashboard.tripDescriptionPlaceholder': 'O čem je tato cesta?',
|
||
'dashboard.startDate': 'Datum začátku',
|
||
'dashboard.endDate': 'Datum konce',
|
||
'dashboard.dayCount': 'Počet dnů',
|
||
'dashboard.dayCountHint': 'Kolik dnů naplánovat, když nejsou nastavena data cesty.',
|
||
'dashboard.noDateHint': 'Datum nezadáno – výchozí délka nastavena na 7 dní. Toto lze kdykoli změnit.',
|
||
'dashboard.coverImage': 'Úvodní obrázek',
|
||
'dashboard.addCoverImage': 'Vybrat úvodní obrázek (nebo přetáhnout sem)',
|
||
'dashboard.addMembers': 'Spolucestující',
|
||
'dashboard.addMember': 'Přidat člena',
|
||
'dashboard.coverSaved': 'Úvodní obrázek uložen',
|
||
'dashboard.coverUploadError': 'Nahrávání se nezdařilo',
|
||
'dashboard.coverRemoveError': 'Odstranění se nezdařilo',
|
||
'dashboard.titleRequired': 'Název je povinný',
|
||
'dashboard.endDateError': 'Datum konce musí být po datu začátku',
|
||
'dashboard.greeting.morning': 'Dobré ráno,',
|
||
'dashboard.greeting.afternoon': 'Dobré odpoledne,',
|
||
'dashboard.greeting.evening': 'Dobrý večer,',
|
||
'dashboard.mobile.liveNow': 'Živě',
|
||
'dashboard.mobile.tripProgress': 'Průběh cesty',
|
||
'dashboard.mobile.daysLeft': 'Zbývá {count} dní',
|
||
'dashboard.mobile.places': 'Místa',
|
||
'dashboard.mobile.buddies': 'Spolucestující',
|
||
'dashboard.mobile.newTrip': 'Nová cesta',
|
||
'dashboard.mobile.currency': 'Měna',
|
||
'dashboard.mobile.timezone': 'Časové pásmo',
|
||
'dashboard.mobile.upcomingTrips': 'Nadcházející cesty',
|
||
'dashboard.mobile.yourTrips': 'Vaše cesty',
|
||
'dashboard.mobile.trips': 'cesty',
|
||
'dashboard.mobile.starts': 'Začátek',
|
||
'dashboard.mobile.duration': 'Doba trvání',
|
||
'dashboard.mobile.day': 'den',
|
||
'dashboard.mobile.days': 'dní',
|
||
'dashboard.mobile.ongoing': 'Probíhající',
|
||
'dashboard.mobile.startsToday': 'Začíná dnes',
|
||
'dashboard.mobile.tomorrow': 'Zítra',
|
||
'dashboard.mobile.inDays': 'Za {count} dní',
|
||
'dashboard.mobile.inMonths': 'Za {count} měsíců',
|
||
'dashboard.mobile.completed': 'Dokončeno',
|
||
'dashboard.mobile.currencyConverter': 'Převodník měn',
|
||
'dashboard.filter.planned': 'Plánované',
|
||
'dashboard.hero.badgeLive': 'ŽIVĚ',
|
||
'dashboard.hero.badgeToday': 'ZAČÍNÁ DNES',
|
||
'dashboard.hero.badgeTomorrow': 'ZÍTRA',
|
||
'dashboard.hero.badgeNext': 'NÁSLEDUJE',
|
||
'dashboard.hero.badgeRecent': 'NEDÁVNO',
|
||
'dashboard.hero.tripDates': 'Termíny cesty',
|
||
'dashboard.hero.noDates': 'Bez termínu',
|
||
'dashboard.hero.travelerOne': '{count} cestovatel',
|
||
'dashboard.hero.travelerMany': '{count} cestovatelů',
|
||
'dashboard.hero.destinationOne': '{count} cíl',
|
||
'dashboard.hero.destinationMany': '{count} cílů',
|
||
'dashboard.hero.dayUnitOne': 'den',
|
||
'dashboard.hero.dayUnitMany': 'dní',
|
||
'dashboard.hero.dayLeft': 'Zbývá den',
|
||
'dashboard.hero.daysLeft': 'Zbývá dní',
|
||
'dashboard.hero.lastDay': 'Poslední den',
|
||
'dashboard.hero.untilStart': 'Do začátku',
|
||
'dashboard.hero.startsIn': 'Začíná za',
|
||
'dashboard.atlas.countriesVisited': 'Atlas · Navštívené země',
|
||
'dashboard.atlas.ofTotal': 'z {total}',
|
||
'dashboard.atlas.tripsTotal': 'Cest celkem',
|
||
'dashboard.atlas.placesMapped': '{count} míst na mapě',
|
||
'dashboard.atlas.daysTraveled': 'Dní na cestách',
|
||
'dashboard.atlas.daysUnit': 'dní',
|
||
'dashboard.atlas.acrossAllTrips': 'napříč všemi cestami',
|
||
'dashboard.atlas.distanceFlown': 'Naletěná vzdálenost',
|
||
'dashboard.atlas.kmUnit': 'km',
|
||
'dashboard.atlas.aroundEquator': '≈ {count}× kolem rovníku',
|
||
'dashboard.card.idea': 'Nápad',
|
||
'dashboard.card.buddyOne': 'Parťák',
|
||
'dashboard.fx.from': 'Z',
|
||
'dashboard.fx.to': 'Na',
|
||
'dashboard.fx.unavailable': 'Kurz není dostupný',
|
||
'dashboard.tz.searchPlaceholder': 'Hledat časové pásmo…',
|
||
'dashboard.tz.empty': 'Zatím žádná další časová pásma — přidejte je pomocí +',
|
||
'dashboard.upcoming.title': 'Nadcházející rezervace',
|
||
'dashboard.upcoming.empty': 'Zatím nic rezervováno.',
|
||
'dashboard.confirm.copy.title': 'Zkopírovat tuto cestu?',
|
||
'dashboard.confirm.copy.willCopy': 'Bude zkopírováno',
|
||
'dashboard.confirm.copy.will1': 'Dny, místa a přiřazení ke dnům',
|
||
'dashboard.confirm.copy.will2': 'Ubytování a rezervace',
|
||
'dashboard.confirm.copy.will3': 'Položky rozpočtu a pořadí kategorií',
|
||
'dashboard.confirm.copy.will4': 'Seznamy věcí (neodškrtnuté)',
|
||
'dashboard.confirm.copy.will5': 'Úkoly (nepřiřazené a neodškrtnuté)',
|
||
'dashboard.confirm.copy.will6': 'Poznámky ke dni',
|
||
'dashboard.confirm.copy.wontCopy': 'Nebude zkopírováno',
|
||
'dashboard.confirm.copy.wont1': 'Spolupracovníci a přiřazení členů',
|
||
'dashboard.confirm.copy.wont2': 'Sdílené poznámky, ankety a zprávy',
|
||
'dashboard.confirm.copy.wont3': 'Soubory a fotky',
|
||
'dashboard.confirm.copy.wont4': 'Sdílecí tokeny',
|
||
'dashboard.confirm.copy.confirm': 'Kopírovat cestu',
|
||
'dashboard.aria.toggleView': 'Přepnout zobrazení',
|
||
'dashboard.aria.filter': 'Filtr',
|
||
'dashboard.aria.duplicate': 'Duplikovat',
|
||
'dashboard.aria.refreshRates': 'Obnovit kurzy',
|
||
'dashboard.aria.swapCurrencies': 'Prohodit měny',
|
||
'dashboard.aria.addTimezone': 'Přidat časové pásmo',
|
||
'dashboard.aria.removeTimezone': 'Odebrat {city}',
|
||
'dashboard.dayCountRequired': 'Počet dní je povinný',
|
||
};
|
||
export default dashboard;
|