mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-21 14:21: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': '통화',
|
||||
@@ -117,41 +117,50 @@ 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.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.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