feat(flutter): 장소 검색·상세 화면과 홈 검색창·카테고리·반려동물 장소 칸
CI (Flutter) / Flutter (analyze · test) (pull_request) Successful in 21m21s
CI / Backend (lint · test · e2e · build) (pull_request) Successful in 12m16s
CI / Frontend (lint · type-check · test) (pull_request) Has been cancelled
CI / 에러 코드 SSOT 동기화 검사 (pull_request) Has been cancelled

디자인 캔버스 4(검색)·6·7(장소 상세) 중 지금 장소 API 로 되는 부분을 붙였다.

- 검색은 반경 20km(백엔드 최대) 거리순. 대구 도심에서 대구 전역이 들어온다.
- 영업시간을 모르는 곳은 "영업시간 미확인 · 방문 전 확인"으로 보인다.
- 한눈에 보기는 공공데이터 원문으로 확실한 것만 올린다(주차 '인근 공영주차장' 같은 애매한 값은 빼기).
- 함께 가기 좋은 곳에는 확인 안 된 상가정보 매장을 넣지 않는다(2026-11-02 합의).
- 1330 관광통역안내는 영어 화면에만(2026-10-29 합의).

검색의 '축제' 탭과 실내·무료·주차·이번 주말 조건은 데이터가 없어 넣지 않았다
(행사 API 검색어 조건 · 운영자 확인 장소 · 날씨).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-04 16:44:56 +09:00
parent 8f711c1706
commit 4bd142a9b7
29 changed files with 3816 additions and 45 deletions
+91 -2
View File
@@ -47,8 +47,97 @@
"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",
"footerSources": "Tourism data: Korea Tourism Organization TourAPI (KOGL Type 1)\nShop data: Small Enterprise and Market Service, commercial district data\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."
"comingSoonBody": "We're still building this screen.",
"back": "Back",
"searchHint": "Search places by name",
"searchClear": "Clear search",
"categoryNavLabel": "Categories",
"categorySights": "Sights",
"categoryFestival": "Festivals",
"categoryPet": "With pets",
"categoryFood": "Food & cafés",
"categoryStay": "Stays",
"categoryIndoor": "Indoor & art",
"categoryNature": "Walks & nature",
"homePetPlaces": "Pet-friendly places nearby",
"homePetPlacesEmpty": "No pet-friendly places nearby yet.",
"searchTabAll": "All",
"filterPet": "Dogs OK",
"searchCount": "{count, plural, =1{1 place} other{{count} places}}",
"searchSortNearest": "Nearest first",
"searchEmptyTitle": "No places match",
"searchEmptyBody": "Try another search word, or switch the category to All.",
"searchEmptyPetBody": "Turn off Dogs OK to see more places.",
"searchRemovePet": "Show without Dogs OK",
"placeSources": "Place data: Korea Tourism Organization TourAPI (KOGL)\nShop data: Small Enterprise and Market Service, commercial district data",
"placeCategoryNature": "Nature & parks",
"placeCategoryAttraction": "Sights",
"placeCategoryCulture": "Culture & art",
"placeCategoryLeisure": "Leisure",
"placeCategoryFood": "Restaurant",
"placeCategoryCafe": "Café",
"placeCategoryBar": "Bar",
"placeCategoryShopping": "Shopping",
"placeCategoryLodging": "Stay",
"placeCategoryOther": "Other",
"placeSettingIndoor": "Indoor",
"placeSettingOutdoor": "Outdoor",
"placeSettingBoth": "Indoor & outdoor",
"placeOpenNow": "Open now",
"placeClosedNow": "Closed now",
"placeHoursUnknownShort": "Hours not confirmed",
"placeHoursUnknown": "Hours not confirmed · check before you go",
"placeHoursVaries": "Hours vary by shop or facility. Check before you go.",
"petAllowed": "Dogs OK",
"petPartial": "Dogs OK in some areas",
"petNotAllowed": "No pets",
"petSizeSmall": "Small",
"petSizeMedium": "Medium",
"petSizeLarge": "Large",
"petSizesLabel": "Dog sizes allowed",
"placeVerifiedOn": "Checked {date}",
"petSourcePublic": "Source: {provider} pet travel info",
"petCheckOnSite": "Check the signs on site before you visit.",
"walkMinutesShort": "{minutes} min walk",
"walkDetail": "{minutes} min walk · {distance}",
"distanceFromHere": "{detail} from you",
"distanceFromPlace": "{detail} from {place}",
"placeGlance": "At a glance",
"glanceParking": "Parking",
"glanceFree": "Free entry",
"glanceAlwaysOpen": "Open 24h",
"placePetSection": "Visiting with pets",
"placeInfoSection": "Getting there & visiting",
"infoAddress": "Address",
"infoHours": "Hours",
"infoRest": "Closed",
"infoFee": "Admission",
"infoParking": "Parking",
"infoParkingFee": "Parking fee",
"infoSpendTime": "Time needed",
"infoReservation": "Booking",
"infoFirstMenu": "Signature dish",
"infoTreatMenu": "Menu",
"infoOpenPeriod": "Season",
"infoSeason": "Best time",
"infoInquiry": "Inquiries",
"infoPhone": "Phone",
"infoHomepage": "Website",
"infoOfficial": "Official page",
"actionCopy": "Copy",
"actionCall": "Call",
"addressCopied": "Address copied.",
"openWebsite": "Open website (external)",
"hotlineTitle": "Need help? Call 1330",
"hotlineBody": "24/7 travel help in English, 日本語, 中文",
"showMore": "Show more",
"showLess": "Show less",
"nearbyEvents": "Festivals & events nearby",
"nearbyPlaces": "Good to go with",
"photoCredit": "Photo: {provider} · {license}",
"koglType1": "KOGL Type 1",
"koglType3": "KOGL Type 3"
}
+171 -7
View File
@@ -14,7 +14,9 @@
"@languageButtonLabel": {
"description": "언어 버튼의 화면 읽기 프로그램용 이름",
"placeholders": {
"language": {"type": "String"}
"language": {
"type": "String"
}
}
},
"languageSheetTitle": "언어",
@@ -36,7 +38,9 @@
"baseLocationButtonLabel": "기준 위치 변경, 현재 {place}",
"@baseLocationButtonLabel": {
"placeholders": {
"place": {"type": "String"}
"place": {
"type": "String"
}
}
},
"homeTitle": "이번 주말, 어디 갈까요?",
@@ -62,18 +66,178 @@
"sourceLabel": "출처: {provider}",
"@sourceLabel": {
"placeholders": {
"provider": {"type": "String"}
"provider": {
"type": "String"
}
}
},
"sourceAsOf": "출처: {provider} · {date} 기준",
"@sourceAsOf": {
"placeholders": {
"provider": {"type": "String"},
"date": {"type": "String"}
"provider": {
"type": "String"
},
"date": {
"type": "String"
}
}
},
"footerSources": "관광 정보 출처: 한국관광공사 TourAPI · 공공누리 제1유형\n공연 정보 출처: (재)예술경영지원센터 공연예술통합전산망(www.kopis.or.kr)\n전시 정보 출처: 한국문화정보원 문화포털",
"footerSources": "관광 정보 출처: 한국관광공사 TourAPI · 공공누리 제1유형\n상가 정보 출처: 소상공인시장진흥공단 상가(상권)정보\n공연 정보 출처: (재)예술경영지원센터 공연예술통합전산망(www.kopis.or.kr)\n전시 정보 출처: 한국문화정보원 문화포털",
"footerNotice": "장소·영업 정보는 바뀔 수 있으니 방문 전에 확인하세요.",
"comingSoonTitle": "곧 만나요",
"comingSoonBody": "이 화면은 아직 만드는 중이에요."
"comingSoonBody": "이 화면은 아직 만드는 중이에요.",
"back": "뒤로",
"searchHint": "장소 이름으로 검색",
"searchClear": "검색어 지우기",
"categoryNavLabel": "카테고리",
"categorySights": "관광지",
"categoryFestival": "축제",
"categoryPet": "반려동물",
"categoryFood": "맛집·카페",
"categoryStay": "숙소",
"categoryIndoor": "실내·전시",
"categoryNature": "산책·자연",
"homePetPlaces": "가까운 반려동물 동반 장소",
"homePetPlacesEmpty": "근처에 반려동물과 함께 갈 수 있는 곳이 아직 없어요.",
"searchTabAll": "전체",
"filterPet": "반려견 동반",
"searchCount": "{count}곳",
"@searchCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"searchSortNearest": "가까운 순",
"searchEmptyTitle": "조건에 맞는 곳이 없어요",
"searchEmptyBody": "검색어를 바꾸거나 분류를 ‘전체’로 바꿔 보세요.",
"searchEmptyPetBody": "‘반려견 동반’을 빼면 더 많은 곳을 볼 수 있어요.",
"searchRemovePet": "반려견 동반 빼고 보기",
"placeSources": "장소 정보 출처: 한국관광공사 TourAPI · 공공누리\n상가 정보 출처: 소상공인시장진흥공단 상가(상권)정보",
"placeCategoryNature": "자연·공원",
"placeCategoryAttraction": "관광지",
"placeCategoryCulture": "문화·전시",
"placeCategoryLeisure": "레저·체험",
"placeCategoryFood": "식당",
"placeCategoryCafe": "카페",
"placeCategoryBar": "술집",
"placeCategoryShopping": "쇼핑",
"placeCategoryLodging": "숙소",
"placeCategoryOther": "기타",
"placeSettingIndoor": "실내",
"placeSettingOutdoor": "실외",
"placeSettingBoth": "실내·실외",
"placeOpenNow": "영업 중",
"placeClosedNow": "지금은 영업 안 함",
"placeHoursUnknownShort": "영업시간 미확인",
"placeHoursUnknown": "영업시간 미확인 · 방문 전 확인",
"placeHoursVaries": "점포·시설마다 달라요. 방문 전에 확인하세요.",
"petAllowed": "반려견 동반",
"petPartial": "일부 구역 동반",
"petNotAllowed": "반려동물 동반 불가",
"petSizeSmall": "소형견",
"petSizeMedium": "중형견",
"petSizeLarge": "대형견",
"petSizesLabel": "동반 가능한 크기",
"placeVerifiedOn": "{date} 확인",
"@placeVerifiedOn": {
"placeholders": {
"date": {
"type": "String"
}
}
},
"petSourcePublic": "출처 {provider} 반려동물 동반여행 정보",
"@petSourcePublic": {
"placeholders": {
"provider": {
"type": "String"
}
}
},
"petCheckOnSite": "방문 전 현장 안내를 꼭 확인하세요.",
"walkMinutesShort": "도보 {minutes}분",
"@walkMinutesShort": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"walkDetail": "도보 {minutes}분 · {distance}",
"@walkDetail": {
"placeholders": {
"minutes": {
"type": "int"
},
"distance": {
"type": "String"
}
}
},
"distanceFromHere": "현재 위치에서 {detail}",
"@distanceFromHere": {
"placeholders": {
"detail": {
"type": "String"
}
}
},
"distanceFromPlace": "{place}에서 {detail}",
"@distanceFromPlace": {
"placeholders": {
"place": {
"type": "String"
},
"detail": {
"type": "String"
}
}
},
"placeGlance": "한눈에 보기",
"glanceParking": "주차 가능",
"glanceFree": "입장 무료",
"glanceAlwaysOpen": "상시 개방",
"placePetSection": "반려동물 동반 정보",
"placeInfoSection": "이용 안내",
"infoAddress": "주소",
"infoHours": "운영시간",
"infoRest": "쉬는 날",
"infoFee": "입장료",
"infoParking": "주차",
"infoParkingFee": "주차 요금",
"infoSpendTime": "관람 시간",
"infoReservation": "예약",
"infoFirstMenu": "대표 메뉴",
"infoTreatMenu": "메뉴",
"infoOpenPeriod": "개장 기간",
"infoSeason": "이용 시기",
"infoInquiry": "문의",
"infoPhone": "전화",
"infoHomepage": "홈페이지",
"infoOfficial": "공식 채널",
"actionCopy": "복사",
"actionCall": "전화",
"addressCopied": "주소를 복사했어요.",
"openWebsite": "홈페이지 열기 (외부 사이트)",
"hotlineTitle": "관광통역안내 1330",
"hotlineBody": "영어·일본어·중국어 24시간 안내",
"showMore": "더 보기",
"showLess": "접기",
"nearbyEvents": "근처 축제·행사",
"nearbyPlaces": "함께 가기 좋은 곳",
"photoCredit": "사진 {provider} · {license}",
"@photoCredit": {
"placeholders": {
"provider": {
"type": "String"
},
"license": {
"type": "String"
}
}
},
"koglType1": "공공누리 제1유형",
"koglType3": "공공누리 제3유형"
}