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.
168 lines
8.7 KiB
TypeScript
168 lines
8.7 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
||
|
||
const dashboard: TranslationStrings = {
|
||
'dashboard.title': 'Moje podróże',
|
||
'dashboard.subtitle.loading': 'Ładowanie podróży...',
|
||
'dashboard.subtitle.trips': '{count} podróży ({archived} zarchiwizowanych)',
|
||
'dashboard.subtitle.empty': 'Rozpocznij swoją pierwszą podróż',
|
||
'dashboard.subtitle.activeOne': '{count} aktywna podróż',
|
||
'dashboard.subtitle.activeMany': '{count} aktywnych podróży',
|
||
'dashboard.subtitle.archivedSuffix': ' · {count} zarchiwizowanych',
|
||
'dashboard.newTrip': 'Nowa podróż',
|
||
'dashboard.newTripSub': 'Zaplanuj nową podróż od zera',
|
||
'dashboard.gridView': 'Widok siatki',
|
||
'dashboard.listView': 'Widok listy',
|
||
'dashboard.currency': 'Waluta',
|
||
'dashboard.timezone': 'Strefy czasowe',
|
||
'dashboard.localTime': 'Czas lokalny',
|
||
'dashboard.timezoneCustomTitle': 'Własna strefa czasowa',
|
||
'dashboard.timezoneCustomLabelPlaceholder': 'Nazwa (opcjonalnie)',
|
||
'dashboard.timezoneCustomTzPlaceholder': 'np. Europe/Warsaw',
|
||
'dashboard.timezoneCustomAdd': 'Dodaj',
|
||
'dashboard.timezoneCustomErrorEmpty': 'Podaj identyfikator strefy czasowej',
|
||
'dashboard.timezoneCustomErrorInvalid': 'Nieprawidłowa strefa czasowa. Użyj formatu takiego jak Europe/Warsaw',
|
||
'dashboard.timezoneCustomErrorDuplicate': 'Już dodana',
|
||
'dashboard.emptyTitle': 'Brak podróży',
|
||
'dashboard.emptyText': 'Utwórz swoją pierwszą podróż i zacznij planować!',
|
||
'dashboard.emptyButton': 'Utwórz pierwszą podróż',
|
||
'dashboard.nextTrip': 'Następna podróż',
|
||
'dashboard.shared': 'Udostępniona',
|
||
'dashboard.sharedBy': 'Udostępniona przez {name}',
|
||
'dashboard.days': 'Dni',
|
||
'dashboard.places': 'Miejsca',
|
||
'dashboard.archive': 'Archiwizuj',
|
||
'dashboard.restore': 'Przywróć',
|
||
'dashboard.archived': 'Zarchiwizowana',
|
||
'dashboard.status.ongoing': 'W trakcie',
|
||
'dashboard.status.today': 'Dzisiaj',
|
||
'dashboard.status.tomorrow': 'Jutro',
|
||
'dashboard.status.past': 'Zakończona',
|
||
'dashboard.status.daysLeft': '{count} dni do końca',
|
||
'dashboard.toast.loadError': 'Nie udało się załadować podróży',
|
||
'dashboard.loadErrorBanner': 'Nie udało się połączyć z serwerem. Twoje podróże są bezpieczne — spróbuj ponownie.',
|
||
'dashboard.retry': 'Spróbuj ponownie',
|
||
'dashboard.toast.created': 'Podróż została utworzona pomyślnie!',
|
||
'dashboard.toast.createError': 'Nie udało się utworzyć podróży',
|
||
'dashboard.toast.updated': 'Podróż została zaktualizowana!',
|
||
'dashboard.toast.updateError': 'Nie udało się zaktualizować podróży',
|
||
'dashboard.toast.deleted': 'Podróż została usunięta',
|
||
'dashboard.toast.deleteError': 'Nie udało się usunąć podróży',
|
||
'dashboard.toast.archived': 'Podróż została zarchiwizowana',
|
||
'dashboard.toast.archiveError': 'Nie udało się zarchiwizować podróży',
|
||
'dashboard.toast.restored': 'Podróż została przywrócona',
|
||
'dashboard.toast.restoreError': 'Nie udało się przywrócić podróży',
|
||
'dashboard.confirm.delete': 'Usunąć podróż "{title}"? Wszystkie miejsca i plany zostaną trwale usunięte.',
|
||
'dashboard.editTrip': 'Edytuj podróż',
|
||
'dashboard.createTrip': 'Utwórz nową podróż',
|
||
'dashboard.tripTitle': 'Nazwa podróży',
|
||
'dashboard.tripTitlePlaceholder': 'np. Lato w Japonii',
|
||
'dashboard.tripDescription': 'Opis',
|
||
'dashboard.tripDescriptionPlaceholder': 'Opisz swoją podróż',
|
||
'dashboard.startDate': 'Data rozpoczęcia',
|
||
'dashboard.endDate': 'Data zakończenia',
|
||
'dashboard.dayCount': 'Liczba dni',
|
||
'dashboard.dayCountHint': 'Ile dni zaplanować, gdy nie ustawiono dat podróży.',
|
||
'dashboard.noDateHint':
|
||
'Nie ustawiono daty — zostanie utworzonych 7 domyślnych dni. Możesz to zmienić w dowolnym momencie.',
|
||
'dashboard.coverImage': 'Okładka',
|
||
'dashboard.addCoverImage': 'Dodaj okładkę (lub przeciągnij i upuść)',
|
||
'dashboard.addMembers': 'Uczestnicy podróży',
|
||
'dashboard.addMember': 'Dodaj uczestnika',
|
||
'dashboard.coverSaved': 'Okładka została zapisana',
|
||
'dashboard.coverUploadError': 'Nie udało się przesłać okładki',
|
||
'dashboard.coverRemoveError': 'Nie udało się usunąć okładki',
|
||
'dashboard.titleRequired': 'Nazwa podróży jest wymagana',
|
||
'dashboard.endDateError': 'Data zakończenia musi być po dacie rozpoczęcia',
|
||
'dashboard.members': 'Towarzysze',
|
||
'dashboard.copyTrip': 'Kopiuj',
|
||
'dashboard.copySuffix': 'kopia',
|
||
'dashboard.toast.copied': 'Podróż skopiowana!',
|
||
'dashboard.toast.copyError': 'Nie udało się skopiować podróży',
|
||
'dashboard.greeting.morning': 'Dzień dobry,',
|
||
'dashboard.greeting.afternoon': 'Dzień dobry,',
|
||
'dashboard.greeting.evening': 'Dobry wieczór,',
|
||
'dashboard.mobile.liveNow': 'Na żywo',
|
||
'dashboard.mobile.tripProgress': 'Postęp podróży',
|
||
'dashboard.mobile.daysLeft': 'Pozostało {count} dni',
|
||
'dashboard.mobile.places': 'Miejsca',
|
||
'dashboard.mobile.buddies': 'Towarzysze',
|
||
'dashboard.mobile.newTrip': 'Nowa podróż',
|
||
'dashboard.mobile.currency': 'Waluta',
|
||
'dashboard.mobile.timezone': 'Strefa czasowa',
|
||
'dashboard.mobile.upcomingTrips': 'Nadchodzące podróże',
|
||
'dashboard.mobile.yourTrips': 'Twoje podróże',
|
||
'dashboard.mobile.trips': 'podróże',
|
||
'dashboard.mobile.starts': 'Początek',
|
||
'dashboard.mobile.duration': 'Czas trwania',
|
||
'dashboard.mobile.day': 'dzień',
|
||
'dashboard.mobile.days': 'dni',
|
||
'dashboard.mobile.ongoing': 'W trakcie',
|
||
'dashboard.mobile.startsToday': 'Zaczyna się dziś',
|
||
'dashboard.mobile.tomorrow': 'Jutro',
|
||
'dashboard.mobile.inDays': 'Za {count} dni',
|
||
'dashboard.mobile.inMonths': 'Za {count} miesięcy',
|
||
'dashboard.mobile.completed': 'Zakończone',
|
||
'dashboard.mobile.currencyConverter': 'Przelicznik walut',
|
||
'dashboard.filter.planned': 'Zaplanowane',
|
||
'dashboard.hero.badgeLive': 'NA ŻYWO',
|
||
'dashboard.hero.badgeToday': 'ZACZYNA SIĘ DZIŚ',
|
||
'dashboard.hero.badgeTomorrow': 'JUTRO',
|
||
'dashboard.hero.badgeNext': 'NASTĘPNA',
|
||
'dashboard.hero.badgeRecent': 'NIEDAWNO',
|
||
'dashboard.hero.tripDates': 'Daty podróży',
|
||
'dashboard.hero.noDates': 'Brak ustawionych dat',
|
||
'dashboard.hero.travelerOne': '{count} podróżny',
|
||
'dashboard.hero.travelerMany': '{count} podróżnych',
|
||
'dashboard.hero.destinationOne': '{count} cel',
|
||
'dashboard.hero.destinationMany': '{count} celów',
|
||
'dashboard.hero.dayUnitOne': 'dzień',
|
||
'dashboard.hero.dayUnitMany': 'dni',
|
||
'dashboard.hero.dayLeft': 'Pozostał dzień',
|
||
'dashboard.hero.daysLeft': 'Pozostało dni',
|
||
'dashboard.hero.lastDay': 'Ostatni dzień',
|
||
'dashboard.hero.untilStart': 'Do startu',
|
||
'dashboard.hero.startsIn': 'Start za',
|
||
'dashboard.atlas.countriesVisited': 'Atlas · Odwiedzone kraje',
|
||
'dashboard.atlas.ofTotal': 'z {total}',
|
||
'dashboard.atlas.tripsTotal': 'Podróże łącznie',
|
||
'dashboard.atlas.placesMapped': '{count} miejsc na mapie',
|
||
'dashboard.atlas.daysTraveled': 'Dni w podróży',
|
||
'dashboard.atlas.daysUnit': 'dni',
|
||
'dashboard.atlas.acrossAllTrips': 'we wszystkich podróżach',
|
||
'dashboard.atlas.distanceFlown': 'Przebyty dystans',
|
||
'dashboard.atlas.kmUnit': 'km',
|
||
'dashboard.atlas.aroundEquator': '≈ {count}× dookoła równika',
|
||
'dashboard.card.idea': 'Pomysł',
|
||
'dashboard.card.buddyOne': 'Towarzysz',
|
||
'dashboard.fx.from': 'Z',
|
||
'dashboard.fx.to': 'Na',
|
||
'dashboard.fx.unavailable': 'Kurs niedostępny',
|
||
'dashboard.tz.searchPlaceholder': 'Szukaj strefy czasowej…',
|
||
'dashboard.tz.empty': 'Brak innych stref czasowych — dodaj jedną za pomocą +',
|
||
'dashboard.upcoming.title': 'Nadchodzące rezerwacje',
|
||
'dashboard.upcoming.empty': 'Nic jeszcze nie zarezerwowano.',
|
||
'dashboard.confirm.copy.title': 'Skopiować tę podróż?',
|
||
'dashboard.confirm.copy.willCopy': 'Zostanie skopiowane',
|
||
'dashboard.confirm.copy.will1': 'Dni, miejsca i przypisania do dni',
|
||
'dashboard.confirm.copy.will2': 'Noclegi i rezerwacje',
|
||
'dashboard.confirm.copy.will3': 'Pozycje budżetu i kolejność kategorii',
|
||
'dashboard.confirm.copy.will4': 'Listy pakowania (niezaznaczone)',
|
||
'dashboard.confirm.copy.will5': 'Zadania (nieprzypisane i niezaznaczone)',
|
||
'dashboard.confirm.copy.will6': 'Notatki dnia',
|
||
'dashboard.confirm.copy.wontCopy': 'Nie zostanie skopiowane',
|
||
'dashboard.confirm.copy.wont1': 'Współpracownicy i przypisania członków',
|
||
'dashboard.confirm.copy.wont2': 'Wspólne notatki, ankiety i wiadomości',
|
||
'dashboard.confirm.copy.wont3': 'Pliki i zdjęcia',
|
||
'dashboard.confirm.copy.wont4': 'Tokeny udostępniania',
|
||
'dashboard.confirm.copy.confirm': 'Kopiuj podróż',
|
||
'dashboard.aria.toggleView': 'Przełącz widok',
|
||
'dashboard.aria.filter': 'Filtruj',
|
||
'dashboard.aria.duplicate': 'Duplikuj',
|
||
'dashboard.aria.refreshRates': 'Odśwież kursy',
|
||
'dashboard.aria.swapCurrencies': 'Zamień waluty',
|
||
'dashboard.aria.addTimezone': 'Dodaj strefę czasową',
|
||
'dashboard.aria.removeTimezone': 'Usuń {city}',
|
||
'dashboard.dayCountRequired': 'Liczba dni jest wymagana',
|
||
};
|
||
export default dashboard;
|