mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-21 22:31:46 +00:00
feat(dashboard): mobile layout, glass UI, context bottom nav + OIDC PKCE (#1079)
* feat(dashboard): mobile layout, glass tiles, plain-text countdown, place photos - Rework the mobile dashboard: cover hero, separate boarding-pass card, trimmed atlas (trips + days only), stacked widgets - New floating bottom tab bar with a centred context-aware + button (new trip / place / journey / entry depending on the page) - Move profile + notifications into a small top strip on the dashboard - Desktop: glassmorphic tiles (light + dark), neutral dark palette, plain-text countdown module, real place photos in the boarding pass * i18n(dashboard): translate new dashboard keys across all locales Fill the dashboard-rework keys (hero, atlas, fx, tz, upcoming, copy dialog, aria labels, countdown) that were left as English placeholders, plus the new startsIn/aria keys, for all 19 languages. * feat(oidc): send PKCE (S256) in the OIDC login flow The OIDC client now generates a code_verifier per login, sends the S256 code_challenge on the authorize request and the code_verifier on the token exchange. Works whether the provider has PKCE optional or required (fixes login against providers that require PKCE, e.g. Pocket ID).
This commit is contained in:
@@ -9,7 +9,7 @@ const dashboard: TranslationStrings = {
|
||||
'dashboard.subtitle.activeMany': '{count} активных поездок',
|
||||
'dashboard.subtitle.archivedSuffix': ' · {count} в архиве',
|
||||
'dashboard.newTrip': 'Новая поездка',
|
||||
'dashboard.newTripSub': 'Start blank · or import from another planner',
|
||||
'dashboard.newTripSub': 'Спланируйте новую поездку с нуля',
|
||||
'dashboard.gridView': 'Плитка',
|
||||
'dashboard.listView': 'Список',
|
||||
'dashboard.currency': 'Валюта',
|
||||
@@ -104,55 +104,64 @@ const dashboard: TranslationStrings = {
|
||||
'dashboard.mobile.inMonths': 'Через {count} мес.',
|
||||
'dashboard.mobile.completed': 'Завершено',
|
||||
'dashboard.mobile.currencyConverter': 'Конвертер валют',
|
||||
'dashboard.filter.planned': 'Planned',
|
||||
'dashboard.hero.badgeLive': 'LIVE NOW',
|
||||
'dashboard.hero.badgeToday': 'STARTS TODAY',
|
||||
'dashboard.hero.badgeTomorrow': 'TOMORROW',
|
||||
'dashboard.hero.badgeNext': 'UP NEXT',
|
||||
'dashboard.hero.badgeRecent': 'RECENT',
|
||||
'dashboard.hero.tripDates': 'Trip dates',
|
||||
'dashboard.hero.noDates': 'No dates set',
|
||||
'dashboard.hero.travelerOne': '{count} traveler',
|
||||
'dashboard.hero.travelerMany': '{count} travelers',
|
||||
'dashboard.hero.destinationOne': '{count} destination',
|
||||
'dashboard.hero.destinationMany': '{count} destinations',
|
||||
'dashboard.hero.dayUnitOne': 'day',
|
||||
'dashboard.hero.dayUnitMany': 'days',
|
||||
'dashboard.hero.dayLeft': 'Day left',
|
||||
'dashboard.hero.daysLeft': 'Days left',
|
||||
'dashboard.hero.lastDay': 'Last day',
|
||||
'dashboard.atlas.countriesVisited': 'Atlas · Countries visited',
|
||||
'dashboard.atlas.ofTotal': 'of {total}',
|
||||
'dashboard.atlas.tripsTotal': 'Trips total',
|
||||
'dashboard.atlas.placesMapped': '{count} places mapped',
|
||||
'dashboard.atlas.daysTraveled': 'Days traveled',
|
||||
'dashboard.atlas.daysUnit': 'days',
|
||||
'dashboard.atlas.acrossAllTrips': 'across all trips',
|
||||
'dashboard.atlas.distanceFlown': 'Distance flown',
|
||||
'dashboard.filter.planned': 'Запланированные',
|
||||
'dashboard.hero.badgeLive': 'СЕЙЧАС В ПУТИ',
|
||||
'dashboard.hero.badgeToday': 'НАЧИНАЕТСЯ СЕГОДНЯ',
|
||||
'dashboard.hero.badgeTomorrow': 'ЗАВТРА',
|
||||
'dashboard.hero.badgeNext': 'ДАЛЕЕ',
|
||||
'dashboard.hero.badgeRecent': 'НЕДАВНО',
|
||||
'dashboard.hero.tripDates': 'Даты поездки',
|
||||
'dashboard.hero.noDates': 'Даты не заданы',
|
||||
'dashboard.hero.travelerOne': '{count} путешественник',
|
||||
'dashboard.hero.travelerMany': '{count} путешественников',
|
||||
'dashboard.hero.destinationOne': '{count} направление',
|
||||
'dashboard.hero.destinationMany': '{count} направлений',
|
||||
'dashboard.hero.dayUnitOne': 'день',
|
||||
'dashboard.hero.dayUnitMany': 'дн.',
|
||||
'dashboard.hero.dayLeft': 'День остался',
|
||||
'dashboard.hero.daysLeft': 'Дней осталось',
|
||||
'dashboard.hero.lastDay': 'Последний день',
|
||||
'dashboard.hero.untilStart': 'До начала',
|
||||
'dashboard.hero.startsIn': 'Старт через',
|
||||
'dashboard.atlas.countriesVisited': 'Атлас · Посещённые страны',
|
||||
'dashboard.atlas.ofTotal': 'из {total}',
|
||||
'dashboard.atlas.tripsTotal': 'Всего поездок',
|
||||
'dashboard.atlas.placesMapped': '{count} мест на карте',
|
||||
'dashboard.atlas.daysTraveled': 'Дней в пути',
|
||||
'dashboard.atlas.daysUnit': 'дн.',
|
||||
'dashboard.atlas.acrossAllTrips': 'по всем поездкам',
|
||||
'dashboard.atlas.distanceFlown': 'Пройдено по воздуху',
|
||||
'dashboard.atlas.kmUnit': 'km',
|
||||
'dashboard.atlas.aroundEquator': '≈ {count}× around the equator',
|
||||
'dashboard.card.idea': 'Idea',
|
||||
'dashboard.card.buddyOne': 'Buddy',
|
||||
'dashboard.fx.from': 'From',
|
||||
'dashboard.fx.to': 'To',
|
||||
'dashboard.fx.unavailable': 'Rate unavailable',
|
||||
'dashboard.tz.searchPlaceholder': 'Search timezone…',
|
||||
'dashboard.tz.empty': 'No other timezones yet — add one with +',
|
||||
'dashboard.upcoming.title': 'Upcoming reservations',
|
||||
'dashboard.upcoming.empty': 'Nothing booked yet.',
|
||||
'dashboard.confirm.copy.title': 'Copy this trip?',
|
||||
'dashboard.confirm.copy.willCopy': 'Will be copied',
|
||||
'dashboard.confirm.copy.will1': 'Days, places & day assignments',
|
||||
'dashboard.confirm.copy.will2': 'Accommodations & reservations',
|
||||
'dashboard.confirm.copy.will3': 'Budget items & category order',
|
||||
'dashboard.confirm.copy.will4': 'Packing lists (unchecked)',
|
||||
'dashboard.confirm.copy.will5': 'TODOs (unassigned & unchecked)',
|
||||
'dashboard.confirm.copy.will6': 'Day notes',
|
||||
'dashboard.confirm.copy.wontCopy': 'Won\'t be copied',
|
||||
'dashboard.confirm.copy.wont1': 'Collaborators & member assignments',
|
||||
'dashboard.confirm.copy.wont2': 'Collab notes, polls & messages',
|
||||
'dashboard.confirm.copy.wont3': 'Files & photos',
|
||||
'dashboard.confirm.copy.wont4': 'Share tokens',
|
||||
'dashboard.confirm.copy.confirm': 'Copy trip',
|
||||
'dashboard.atlas.aroundEquator': '≈ {count}× вокруг экватора',
|
||||
'dashboard.card.idea': 'Идея',
|
||||
'dashboard.card.buddyOne': 'Попутчик',
|
||||
'dashboard.fx.from': 'Из',
|
||||
'dashboard.fx.to': 'В',
|
||||
'dashboard.fx.unavailable': 'Курс недоступен',
|
||||
'dashboard.tz.searchPlaceholder': 'Поиск часового пояса…',
|
||||
'dashboard.tz.empty': 'Других часовых поясов пока нет — добавьте с помощью +',
|
||||
'dashboard.upcoming.title': 'Ближайшие брони',
|
||||
'dashboard.upcoming.empty': 'Пока ничего не забронировано.',
|
||||
'dashboard.confirm.copy.title': 'Скопировать эту поездку?',
|
||||
'dashboard.confirm.copy.willCopy': 'Будет скопировано',
|
||||
'dashboard.confirm.copy.will1': 'Дни, места и распределение по дням',
|
||||
'dashboard.confirm.copy.will2': 'Жильё и брони',
|
||||
'dashboard.confirm.copy.will3': 'Статьи бюджета и порядок категорий',
|
||||
'dashboard.confirm.copy.will4': 'Списки вещей (без отметок)',
|
||||
'dashboard.confirm.copy.will5': 'Задачи (без назначений и отметок)',
|
||||
'dashboard.confirm.copy.will6': 'Заметки дня',
|
||||
'dashboard.confirm.copy.wontCopy': 'Не будет скопировано',
|
||||
'dashboard.confirm.copy.wont1': 'Участники и назначения',
|
||||
'dashboard.confirm.copy.wont2': 'Совместные заметки, опросы и сообщения',
|
||||
'dashboard.confirm.copy.wont3': 'Файлы и фото',
|
||||
'dashboard.confirm.copy.wont4': 'Токены доступа',
|
||||
'dashboard.confirm.copy.confirm': 'Копировать поездку',
|
||||
'dashboard.aria.toggleView': 'Переключить вид',
|
||||
'dashboard.aria.filter': 'Фильтр',
|
||||
'dashboard.aria.duplicate': 'Дублировать',
|
||||
'dashboard.aria.refreshRates': 'Обновить курсы',
|
||||
'dashboard.aria.swapCurrencies': 'Поменять валюты',
|
||||
'dashboard.aria.addTimezone': 'Добавить часовой пояс',
|
||||
'dashboard.aria.removeTimezone': 'Удалить {city}',
|
||||
};
|
||||
export default dashboard;
|
||||
|
||||
Reference in New Issue
Block a user