feat(flutter): 앱 뼈대와 홈 이번 주말 축제·행사 화면

데이터 기반(장소·행사 조회 API)이 생겨 앱 화면을 붙이기 시작한다.
디자인 캔버스의 1~7번(시작·둘러보기) 중 지금 API 로 바로 되는 것부터 만들었다.

- 앱 뼈대: 디자인 캔버스의 색·글자 크기·선 아이콘을 옮긴 테마, go_router 하단 탭
  (홈·지도·내 코스·내 정보 — 지도·내 코스·내 정보는 자리만), 한/영 문구(arb, 4개 언어 전제)
- 첫 실행: 현재 위치를 쓰거나 대구 동네(도심·수성못·앞산 카페거리)를 고른다.
  위치를 못 쓰면 대구 도심을 기준으로 시작하고 알린다. 좌표는 저장하지 않는다
- 홈 '이번 주말 축제·행사': 기준 위치 반경 120km 거리순, 비면 다가오는 30일 (2026-11-03 합의)
- 행사 전체 목록(커서 페이지)·상세(시간·요금·예매·전화·소개·출처)
- 한국어 문단은 단어 단위 줄바꿈(keepAll) — Flutter 기본은 글자 단위로 끊는다
- 공공누리 Type3 사진은 자르지 않고, 꼬리말에 관광공사·KOPIS·문화포털 출처를 적는다
- 한/영 생성물(lib/l10n/generated)은 flutter pub get 이 만들므로 git 에서 뺀다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-04 14:51:02 +09:00
parent 170be20b6d
commit 0f306e71ba
59 changed files with 3876 additions and 83 deletions
+54
View File
@@ -0,0 +1,54 @@
{
"@@locale": "en",
"appTitle": "WanderGo",
"tabHome": "Home",
"tabMap": "Map",
"tabCourses": "My courses",
"tabMe": "Me",
"languageName": "English",
"languageShort": "EN",
"languageButtonLabel": "Change language, current {language}",
"languageSheetTitle": "Language",
"onboardingTitle": "Where to go?\nLet's plan it together.",
"onboardingBody": "Plan a day out with friends, matched to festival dates and pet-friendly spots.",
"onboardingLocationTitle": "Use your location to see nearby places first",
"onboardingLocationBody": "Only used while you use the app. You can turn it off in Settings anytime.",
"onboardingUseLocation": "Use my location",
"onboardingPickRegion": "Choose an area",
"regionSheetTitle": "Where should we start from?",
"regionCurrentLocation": "Current location",
"regionDowntown": "Downtown Daegu",
"regionDowntownHint": "Dongseongno · Kim Kwang-seok Street",
"regionSuseongmot": "Suseongmot Lake",
"regionSuseongmotHint": "Suseong-gu",
"regionApsan": "Apsan Cafe Street",
"regionApsanHint": "Daemyeong-dong, Nam-gu",
"locationUnavailable": "We couldn't get your location, so we're showing downtown Daegu.",
"baseLocationButtonLabel": "Change base location, current {place}",
"homeTitle": "Where to this weekend?",
"homeWeekendEvents": "Festivals & events this weekend",
"homeUpcomingEvents": "Upcoming festivals & events",
"homeEventsEmpty": "No festivals or events nearby yet.",
"seeAll": "See all",
"retry": "Try again",
"loadFailed": "Couldn't load this.",
"eventKindFestival": "Festival",
"eventKindPerformance": "Performance",
"eventKindEvent": "Event",
"eventKindExhibition": "Exhibition",
"eventOngoing": "Now on",
"eventPlace": "Venue",
"eventFee": "Price",
"eventTime": "Hours",
"eventAbout": "About",
"eventOpenBooking": "Tickets & info",
"eventOpenHomepage": "Website",
"eventCall": "Call",
"linkOpenFailed": "Couldn't open the link.",
"sourceLabel": "Source: {provider}",
"sourceAsOf": "Source: {provider} · as of {date}",
"footerSources": "Tourism data: Korea Tourism Organization TourAPI (KOGL Type 1)\nPerformance data: Korea Arts Management Service, KOPIS (www.kopis.or.kr)\nExhibition data: Korea Culture Information Service Agency, Culture Portal",
"footerNotice": "Place and opening details can change. Please check before you go.",
"comingSoonTitle": "Coming soon",
"comingSoonBody": "We're still building this screen."
}
+79
View File
@@ -0,0 +1,79 @@
{
"@@locale": "ko",
"appTitle": "WanderGo",
"tabHome": "홈",
"tabMap": "지도",
"tabCourses": "내 코스",
"tabMe": "내 정보",
"languageName": "한국어",
"@languageName": {
"description": "지금 쓰는 언어의 자기 이름 — 언어 버튼에 그대로 보인다"
},
"languageShort": "KO",
"languageButtonLabel": "언어 변경, 현재 {language}",
"@languageButtonLabel": {
"description": "언어 버튼의 화면 읽기 프로그램용 이름",
"placeholders": {
"language": {"type": "String"}
}
},
"languageSheetTitle": "언어",
"onboardingTitle": "어디 갈지,\n같이 짜 볼까요?",
"onboardingBody": "축제 일정과 반려동물 동반 조건까지 맞춘 하루 코스를 친구와 함께 만들어요.",
"onboardingLocationTitle": "현재 위치를 쓰면 가까운 곳부터 보여 드려요",
"onboardingLocationBody": "앱을 쓰는 동안에만 쓰고, 설정에서 언제든 끌 수 있어요.",
"onboardingUseLocation": "현재 위치 사용하기",
"onboardingPickRegion": "지역 직접 고르기",
"regionSheetTitle": "어디를 기준으로 볼까요?",
"regionCurrentLocation": "현재 위치",
"regionDowntown": "대구 도심",
"regionDowntownHint": "동성로·김광석길·근대골목",
"regionSuseongmot": "수성못",
"regionSuseongmotHint": "수성구",
"regionApsan": "앞산 카페거리",
"regionApsanHint": "남구 대명동",
"locationUnavailable": "현재 위치를 가져오지 못해 대구 도심을 기준으로 보여 드려요.",
"baseLocationButtonLabel": "기준 위치 변경, 현재 {place}",
"@baseLocationButtonLabel": {
"placeholders": {
"place": {"type": "String"}
}
},
"homeTitle": "이번 주말, 어디 갈까요?",
"homeWeekendEvents": "이번 주말 축제·행사",
"homeUpcomingEvents": "다가오는 축제·행사",
"homeEventsEmpty": "근처에 예정된 축제·행사가 아직 없어요.",
"seeAll": "전체 보기",
"retry": "다시 시도",
"loadFailed": "불러오지 못했어요.",
"eventKindFestival": "축제",
"eventKindPerformance": "공연",
"eventKindEvent": "행사",
"eventKindExhibition": "전시",
"eventOngoing": "진행 중",
"eventPlace": "장소",
"eventFee": "요금",
"eventTime": "시간",
"eventAbout": "소개",
"eventOpenBooking": "예매·관람 안내",
"eventOpenHomepage": "홈페이지",
"eventCall": "전화 걸기",
"linkOpenFailed": "링크를 열지 못했어요.",
"sourceLabel": "출처: {provider}",
"@sourceLabel": {
"placeholders": {
"provider": {"type": "String"}
}
},
"sourceAsOf": "출처: {provider} · {date} 기준",
"@sourceAsOf": {
"placeholders": {
"provider": {"type": "String"},
"date": {"type": "String"}
}
},
"footerSources": "관광 정보 출처: 한국관광공사 TourAPI · 공공누리 제1유형\n공연 정보 출처: (재)예술경영지원센터 공연예술통합전산망(www.kopis.or.kr)\n전시 정보 출처: 한국문화정보원 문화포털",
"footerNotice": "장소·영업 정보는 바뀔 수 있으니 방문 전에 확인하세요.",
"comingSoonTitle": "곧 만나요",
"comingSoonBody": "이 화면은 아직 만드는 중이에요."
}