diff --git a/public/libs/nav-manager.js b/public/libs/nav-manager.js index b4bec19..a14f8d7 100644 --- a/public/libs/nav-manager.js +++ b/public/libs/nav-manager.js @@ -96,7 +96,14 @@ async function loadPage(path) { //๋ฒ์ญ async function loadTranslations(lang) { - const namespaces = ["header", "index"]; + const namespaces = [ + "header", + "index", + "contents", + "map-page", + "aiSchedule", + "my-page", + ]; const loaded = await Promise.all( namespaces.map((ns) => fetch(`/locales/${lang}/${ns}.json`, { cache: "no-store" }) @@ -242,7 +249,7 @@ function updateLoginUI(isLoggedIn, displayName = "") { loginBtn: !!loginBtn, logoutBtn: !!logoutBtn, isLoggedIn, - displayName + displayName, }); if (!loginBtn) { diff --git a/public/locales/en/aiSchedule.json b/public/locales/en/aiSchedule.json new file mode 100644 index 0000000..91086a8 --- /dev/null +++ b/public/locales/en/aiSchedule.json @@ -0,0 +1,28 @@ +{ + "title": { + "main": "AI Travel Recommendation" + }, + "breadcrumb": { + "main": "AI Recommend" + }, + "filter": { + "all": "All", + "drama": "Drama", + "movie": "Movie", + "kpop": "K-POP" + }, + "label": { + "cost": "Estimated Cost", + "days": "Recommended Duration", + "distance": "Distance", + "transport": "Transportation" + }, + "button": { + "recommend": "Get AI Recommendation", + "top": "Back to Top" + }, + "footer": { + "copy": "ยฉ 2025 Codetour. All rights reserved." + } +} + diff --git a/public/locales/en/contents.json b/public/locales/en/contents.json new file mode 100644 index 0000000..e29cd0f --- /dev/null +++ b/public/locales/en/contents.json @@ -0,0 +1,26 @@ +{ + "title": { + "main": "K-Spot - Korean Wave Travel Platform" + }, + "recent": { + "title": "Recently Visited Places", + "clearAll": "Clear All" + }, + "content": { + "title": "Destinations by Content", + "subtitle": "Find filming locations from your favorite dramas, movies, and shows" + }, + "tab": { + "kpop": "K-Pop", + "kdrama": "K-Drama/Movie", + "kwebtoon": "K-Webtoon", + "kfood": "K-Food", + "kent": "K-Entertainment" + }, + "footer": { + "copy": "ยฉ Kspot" + }, + "modal": { + "close": "Close" + } +} diff --git a/public/locales/en/map-page.json b/public/locales/en/map-page.json new file mode 100644 index 0000000..fcd11df --- /dev/null +++ b/public/locales/en/map-page.json @@ -0,0 +1,69 @@ +{ + "header": { + "title": "๐บ๐ธ K-Content Travel Map", + "subtitle": "Create your own special travel course with K-content" + }, + "btn": { + "home": "Home", + "search": "Search", + "saveCourse": "๐พ Save Course", + "showRoute": "๐ Show Route", + "aiRecommend": "๐ค Get AI Recommendation", + "load": "Load", + "delete": "Delete", + "addToCourse": "+ Add to Course" + }, + "section": { + "search": "๐ Search", + "myCourse": "๐ My Travel Course", + "savedCourses": "๐ Saved Courses" + }, + "tab": { + "place": "Search by Place", + "content": "Search by Content" + }, + "placeholder": { + "placeSearch": "Search by place name or address..." + }, + "option": { + "selectContent": "Select content...", + "selectUser": "Select user..." + }, + "hint": { + "dragOrder": "You can change the order by dragging" + }, + "user": { + "user1": "User 1", + "user2": "User 2", + "user3": "User 3" + }, + "alert": { + "enterSearch": "Please enter a search term ๐", + "noResults": "No search results ๐ข", + "selectContent": "Please select content ๐", + "selectUser": "Please select a user ๐", + "noLocations": "No filming locations for this content ๐ข", + "deleteCourse": "Do you want to delete this course? ๐๏ธ", + "courseDeleted": "โ Course deleted!", + "addPlaces": "Please add places to your course ๐", + "courseNamePrompt": "Enter a name for your course โจ", + "courseNameDefault": "My K-Travel Course", + "courseSaved": "๐ Saved successfully!\nCourse ID: ", + "saveFailed": "Failed to save ๐ข", + "noSavedCourses": "No saved courses ๐ญ", + "courseLoaded": "โจ Loaded course \"{name}\"!", + "minTwoPlaces": "You need at least 2 places to view the route ๐บ๏ธ", + "routeFailed": "Failed to load route ๐ข", + "added": "โจ {name} has been added to your course!" + }, + "route": { + "totalDistance": "๐ Total Distance: ", + "estimatedTime": "โฑ๏ธ Estimated Time: ", + "info": "๐ Route Info" + }, + "text": { + "places": " places", + "km": " km", + "min": " min" + } +} diff --git a/public/locales/en/my-page.json b/public/locales/en/my-page.json new file mode 100644 index 0000000..1006738 --- /dev/null +++ b/public/locales/en/my-page.json @@ -0,0 +1,30 @@ +{ + "title": { + "mypage-main": "My Page" + }, + "subtitle": { + "nickname": "KimTravel" + }, + "card": { + "profile": { + "title": "Manage Personal Info", + "desc": "Change profile, email, password" + }, + "preference": { + "title": "Set Travel Preferences", + "desc": "Set interest tags, trips, travel styles" + }, + "favorite": { + "title": "Manage Favorite Content", + "desc": "View liked content, destinations, courses" + }, + "course": { + "title": "My Travel Courses", + "desc": "Create and save travel courses" + }, + "review": { + "title": "Manage Reviews", + "desc": "Manage written reviews and ratings" + } + } +} diff --git a/public/locales/ja/aiSchedule.json b/public/locales/ja/aiSchedule.json new file mode 100644 index 0000000..739527f --- /dev/null +++ b/public/locales/ja/aiSchedule.json @@ -0,0 +1,27 @@ +{ + "title": { + "main": "AIๆ ่กใใใใ" + }, + "breadcrumb": { + "main": "AIใใใใ" + }, + "filter": { + "all": "ใในใฆ", + "drama": "ใใฉใ", + "movie": "ๆ ็ป", + "kpop": "K-POP" + }, + "label": { + "cost": "ไบๆณ่ฒป็จ", + "days": "ใใใใๆฅ็จ", + "distance": "็งปๅ่ท้ข", + "transport": "ไบค้ๆๆฎต" + }, + "button": { + "recommend": "AIใใใใใๅใๅใ", + "top": "ใใใใธๆปใ" + }, + "footer": { + "copy": "ยฉ 2025 Codetour. All rights reserved." + } +} diff --git a/public/locales/ja/contents.json b/public/locales/ja/contents.json new file mode 100644 index 0000000..2f7e5f6 --- /dev/null +++ b/public/locales/ja/contents.json @@ -0,0 +1,26 @@ +{ + "title": { + "main": "K-Spot - ้ๆตใณใณใใณใๆ ่กใใฉใใใใฉใผใ " + }, + "recent": { + "title": "ๆ่ฟ่จชใใๅ ดๆ", + "clearAll": "ใในใฆๅ้ค" + }, + "content": { + "title": "ใณใณใใณใๅฅๆ ่กๅฐ", + "subtitle": "ใๆฐใซๅ ฅใใฎใใฉใใๆ ็ปใใใฉใจใใฃใฎๆฎๅฝฑๅฐใๆขใใฆใฟใพใใใ" + }, + "tab": { + "kpop": "K-Pop", + "kdrama": "K-ใใฉใ/ๆ ็ป", + "kwebtoon": "K-ใฆใงใใใฅใผใณ", + "kfood": "K-ใใผใ", + "kent": "K-ใจใณใฟใก" + }, + "footer": { + "copy": "ยฉ Kspot" + }, + "modal": { + "close": "้ใใ" + } +} diff --git a/public/locales/ja/map-page.json b/public/locales/ja/map-page.json new file mode 100644 index 0000000..463d564 --- /dev/null +++ b/public/locales/ja/map-page.json @@ -0,0 +1,69 @@ +{ + "header": { + "title": "๐ฏ๐ต Kใณใณใใณใๆ ่กใใใ", + "subtitle": "้ๆตใณใณใใณใใง็นๅฅใชๆ ่กใณใผในใไฝใใพใใใ" + }, + "btn": { + "home": "ใใผใ ใธ", + "search": "ๆค็ดข", + "saveCourse": "๐พ ใณใผในใไฟๅญ", + "showRoute": "๐ ็ต่ทฏใ่กจ็คบ", + "aiRecommend": "๐ค AIใใใใใๅใๅใ", + "load": "่ชญใฟ่พผใฟ", + "delete": "ๅ้ค", + "addToCourse": "+ ใณใผในใซ่ฟฝๅ " + }, + "section": { + "search": "๐ ๆค็ดข", + "myCourse": "๐ ใใคๆ ่กใณใผใน", + "savedCourses": "๐ ไฟๅญใใใใณใผใน" + }, + "tab": { + "place": "ๅ ดๆใงๆค็ดข", + "content": "ใณใณใใณใใงๆค็ดข" + }, + "placeholder": { + "placeSearch": "ๅ ดๆๅใไฝๆใๆค็ดข..." + }, + "option": { + "selectContent": "ใณใณใใณใใ้ธๆ...", + "selectUser": "ใฆใผใถใผใ้ธๆ..." + }, + "hint": { + "dragOrder": "ใใฉใใฐใใฆ้ ็ชใๅคๆดใงใใพใ" + }, + "user": { + "user1": "ใฆใผใถใผ 1", + "user2": "ใฆใผใถใผ 2", + "user3": "ใฆใผใถใผ 3" + }, + "alert": { + "enterSearch": "ๆค็ดขใฏใผใใๅ ฅๅใใฆใใ ใใ ๐", + "noResults": "ๆค็ดข็ตๆใใใใพใใ ๐ข", + "selectContent": "ใณใณใใณใใ้ธๆใใฆใใ ใใ ๐", + "selectUser": "ใฆใผใถใผใ้ธๆใใฆใใ ใใ ๐", + "noLocations": "ใใฎใณใณใใณใใฎๆฎๅฝฑๅฐใฏใใใพใใ ๐ข", + "deleteCourse": "ใใฎใณใผในใๅ้คใใพใใ๏ผ ๐๏ธ", + "courseDeleted": "โ ใณใผในใๅ้คใใพใใ๏ผ", + "addPlaces": "ใณใผในใซๅ ดๆใ่ฟฝๅ ใใฆใใ ใใ ๐", + "courseNamePrompt": "ใณใผในๅใๅ ฅๅใใฆใใ ใใ โจ", + "courseNameDefault": "็งใฎKๆ ่กใณใผใน", + "courseSaved": "๐ ไฟๅญๅฎไบ๏ผ\nใณใผในID: ", + "saveFailed": "ไฟๅญใซๅคฑๆใใพใใ ๐ข", + "noSavedCourses": "ไฟๅญใใใใณใผในใใใใพใใ ๐ญ", + "courseLoaded": "โจ ใ{name}ใใณใผในใ่ชญใฟ่พผใฟใพใใ๏ผ", + "minTwoPlaces": "็ต่ทฏใ่ฆใใซใฏๅฐใชใใจใ2ใคใฎๅ ดๆใๅฟ ่ฆใงใ ๐บ๏ธ", + "routeFailed": "็ต่ทฏใฎๅๅพใซๅคฑๆใใพใใ ๐ข", + "added": "โจ {name} ใใณใผในใซ่ฟฝๅ ใใพใใ๏ผ" + }, + "route": { + "totalDistance": "๐ ็ท่ท้ข: ", + "estimatedTime": "โฑ๏ธ ๆ่ฆๆ้: ", + "info": "๐ ็ต่ทฏๆ ๅ ฑ" + }, + "text": { + "places": "ใถๆ", + "km": " km", + "min": " ๅ" + } +} diff --git a/public/locales/ja/my-page.json b/public/locales/ja/my-page.json new file mode 100644 index 0000000..8974910 --- /dev/null +++ b/public/locales/ja/my-page.json @@ -0,0 +1,30 @@ +{ + "title": { + "mypage-main": "ใใคใใผใธ" + }, + "subtitle": { + "nickname": "ใญใ ๆ ่ก" + }, + "card": { + "profile": { + "title": "ๅไบบๆ ๅ ฑ็ฎก็", + "desc": "ใใญใใฃใผใซใใกใผใซใใในใฏใผใใฎๅคๆด" + }, + "preference": { + "title": "ๆ ่กใฎๅฅฝใฟ่จญๅฎ", + "desc": "่ๅณใฟใฐใๆ ่กใๆ ่กในใฟใคใซใ่จญๅฎ" + }, + "favorite": { + "title": "ใๆฐใซๅ ฅใใณใณใใณใ็ฎก็", + "desc": "ใใใญใใใณใณใใณใใๆ ่กๅ ใใณใผในใ่ฆใ" + }, + "course": { + "title": "็งใฎๆ ่กใณใผใน", + "desc": "ๆ ่กใณใผในใฎไฝๆใจไฟๅญ" + }, + "review": { + "title": "ใฌใใฅใผ็ฎก็", + "desc": "ๆธใใใฌใใฅใผใ่ฉไพกใ็ฎก็" + } + } +} diff --git a/public/locales/ko/aiSchedule.json b/public/locales/ko/aiSchedule.json new file mode 100644 index 0000000..c7a4285 --- /dev/null +++ b/public/locales/ko/aiSchedule.json @@ -0,0 +1,27 @@ +{ + "title": { + "main": "AI ์ผ์ ์ถ์ฒ" + }, + "breadcrumb": { + "main": "AI ์ถ์ฒ" + }, + "filter": { + "all": "๋ชจ๋", + "drama": "๋๋ผ๋ง", + "movie": "์ํ", + "kpop": "K-POP" + }, + "label": { + "cost": "์์๊ฒฝ๋น", + "days": "์ถ์ฒ์ผ์ ", + "distance": "์ด๋๊ฑฐ๋ฆฌ", + "transport": "์ด๋์๋จ" + }, + "button": { + "recommend": "AI ์ผ์ ์ถ์ฒ๋ฐ๊ธฐ", + "top": "๋งจ ์๋ก" + }, + "footer": { + "copy": "ยฉ 2025 Codetour. All rights reserved." + } +} diff --git a/public/locales/ko/contents.json b/public/locales/ko/contents.json new file mode 100644 index 0000000..0a89189 --- /dev/null +++ b/public/locales/ko/contents.json @@ -0,0 +1,26 @@ +{ + "title": { + "main": "K-Spot - ํ๋ฅ ์ฝํ ์ธ ์ฌํ ํ๋ซํผ" + }, + "recent": { + "title": "์ต๊ทผ ๋ฐฉ๋ฌธํ ์ฅ์", + "clearAll": "์ ์ฒด ์ญ์ " + }, + "content": { + "title": "์ฝํ ์ธ ๋ณ ์ฌํ์ง", + "subtitle": "์ข์ํ๋ ๋๋ผ๋ง, ์ํ, ์๋ฅ์ ์ดฌ์์ง๋ฅผ ์ฐพ์๋ณด์ธ์" + }, + "tab": { + "kpop": "K-Pop", + "kdrama": "K-Drama/Movie", + "kwebtoon": "K-Webtoon", + "kfood": "K-Food", + "kent": "K-Ent" + }, + "footer": { + "copy": "ยฉ Kspot" + }, + "modal": { + "close": "๋ซ๊ธฐ" + } +} diff --git a/public/locales/ko/map-page.json b/public/locales/ko/map-page.json new file mode 100644 index 0000000..e4c11c9 --- /dev/null +++ b/public/locales/ko/map-page.json @@ -0,0 +1,69 @@ +{ + "header": { + "title": "๐ฐ๐ท K-์ฝํ ์ธ ์ฌํ ์ง๋", + "subtitle": "ํ๋ฅ ์ฝํ ์ธ ์ ํจ๊ปํ๋ ํน๋ณํ ์ฌํ ์ฝ์ค๋ฅผ ๋ง๋ค์ด๋ณด์ธ์" + }, + "btn": { + "home": "ํ์ผ๋ก", + "search": "๊ฒ์", + "saveCourse": "๐พ ์ฝ์ค ์ ์ฅํ๊ธฐ", + "showRoute": "๐ ๊ฒฝ๋ก ํ์ธํ๊ธฐ", + "aiRecommend": "๐ค AI ์ถ์ฒ๋ฐ๊ธฐ", + "load": "๋ถ๋ฌ์ค๊ธฐ", + "delete": "์ญ์ ", + "addToCourse": "+ ์ฝ์ค ์ถ๊ฐ" + }, + "section": { + "search": "๐ ๊ฒ์", + "myCourse": "๐ ๋๋ง์ ์ฌํ ์ฝ์ค", + "savedCourses": "๐ ์ ์ฅ๋ ์ฝ์ค" + }, + "tab": { + "place": "์ฅ์ ๊ฒ์", + "content": "์ฝํ ์ธ ๊ฒ์" + }, + "placeholder": { + "placeSearch": "์ฅ์๋ช , ์ฃผ์ ๊ฒ์..." + }, + "option": { + "selectContent": "์ฝํ ์ธ ์ ํ...", + "selectUser": "์ฌ์ฉ์ ์ ํ..." + }, + "hint": { + "dragOrder": "๋๋๊ทธ๋ก ์์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ด์" + }, + "user": { + "user1": "์ฌ์ฉ์ 1", + "user2": "์ฌ์ฉ์ 2", + "user3": "์ฌ์ฉ์ 3" + }, + "alert": { + "enterSearch": "๊ฒ์์ด๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์ ๐", + "noResults": "๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค ๐ข", + "selectContent": "์ฝํ ์ธ ๋ฅผ ์ ํํด์ฃผ์ธ์ ๐", + "selectUser": "์ฌ์ฉ์๋ฅผ ์ ํํด์ฃผ์ธ์ ๐", + "noLocations": "ํด๋น ์ฝํ ์ธ ์ ์ดฌ์์ง๊ฐ ์์ต๋๋ค ๐ข", + "deleteCourse": "์ด ์ฝ์ค๋ฅผ ์ญ์ ํ์๊ฒ ์ต๋๊น? ๐๏ธ", + "courseDeleted": "โ ์ฝ์ค๊ฐ ์ญ์ ๋์์ต๋๋ค!", + "addPlaces": "์ฝ์ค์ ์ฅ์๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์ ๐", + "courseNamePrompt": "์ฝ์ค ์ด๋ฆ์ ์ ๋ ฅํ์ธ์ โจ", + "courseNameDefault": "๋์ K-์ฌํ ์ฝ์ค", + "courseSaved": "๐ ์ ์ฅ ์๋ฃ!\n์ฝ์ค ID: ", + "saveFailed": "์ ์ฅ์ ์คํจํ์ต๋๋ค ๐ข", + "noSavedCourses": "์ ์ฅ๋ ์ฝ์ค๊ฐ ์์ต๋๋ค ๐ญ", + "courseLoaded": "โจ \"{name}\" ์ฝ์ค๋ฅผ ๋ถ๋ฌ์์ต๋๋ค!", + "minTwoPlaces": "๊ฒฝ๋ก๋ฅผ ๋ณด๋ ค๋ฉด ์ต์ 2๊ฐ ์ด์์ ์ฅ์๊ฐ ํ์ํฉ๋๋ค ๐บ๏ธ", + "routeFailed": "๊ฒฝ๋ก ๊ฒ์์ ์คํจํ์ต๋๋ค ๐ข", + "added": "โจ {name}์ด(๊ฐ) ์ฝ์ค์ ์ถ๊ฐ๋์์ต๋๋ค!" + }, + "route": { + "totalDistance": "๐ ์ด ๊ฑฐ๋ฆฌ: ", + "estimatedTime": "โฑ๏ธ ์์ ์๊ฐ: ", + "info": "๐ ๊ฒฝ๋ก ์ ๋ณด" + }, + "text": { + "places": "๊ฐ ์ฅ์", + "km": " km", + "min": " ๋ถ" + } +} diff --git a/public/locales/ko/my-page.json b/public/locales/ko/my-page.json new file mode 100644 index 0000000..857ec29 --- /dev/null +++ b/public/locales/ko/my-page.json @@ -0,0 +1,30 @@ +{ + "title": { + "mypage-main": "๋ง์ดํ์ด์ง" + }, + "subtitle": { + "nickname": "๊น์ฌํ" + }, + "card": { + "profile": { + "title": "๊ฐ์ธ์ ๋ณด ๊ด๋ฆฌ", + "desc": "ํ๋กํ, ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ" + }, + "preference": { + "title": "์ฌํ ์ ํธ๋ ์ค์ ", + "desc": "๊ด์ฌ ํ๊ทธ, ์ฌํ, ์ฌํ ์คํ์ผ ์ค์ " + }, + "favorite": { + "title": "๊ด์ฌ ์ฝํ ์ธ ๊ด๋ฆฌ", + "desc": "์ข์์ํ ์ปจํ ์ธ , ์ฌํ์ง, ์ฝ์ค ๋ณด๊ธฐ" + }, + "course": { + "title": "๋์ ์ฌํ ์ฝ์ค", + "desc": "์์ฑ ๋ฐ ์ ์ฅ๋ ์ฌํ ์ฝ์ค" + }, + "review": { + "title": "๋ฆฌ๋ทฐ ๊ด๋ฆฌ", + "desc": "์์ฑํ ๋ฆฌ๋ทฐ ๋ฐ ํ์ ๊ด๋ฆฌ" + } + } +} diff --git a/source/pages/aiCourse/aiSchedule.html b/source/pages/aiCourse/aiSchedule.html index 40976b8..c3a6270 100644 --- a/source/pages/aiCourse/aiSchedule.html +++ b/source/pages/aiCourse/aiSchedule.html @@ -11,15 +11,15 @@ rel="stylesheet" /> -
์ข์ํ๋ ๋๋ผ๋ง, ์ํ, ์๋ฅ์ ์ดฌ์์ง๋ฅผ ์ฐพ์๋ณด์ธ์
++ ์ข์ํ๋ ๋๋ผ๋ง, ์ํ, ์๋ฅ์ ์ดฌ์์ง๋ฅผ ์ฐพ์๋ณด์ธ์ +
- ์๋ ํ์ธ์, ๊น์ฌํ๋! +
+ ์๋ ํ์ธ์, + ๊น์ฌํ๋!
ํ๋กํ, ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ
+ํ๋กํ, ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ
๊ด์ฌ ํ๊ทธ, ์ฌํ, ์ฌํ ์คํ์ผ ์ค์
++ ๊ด์ฌ ํ๊ทธ, ์ฌํ, ์ฌํ ์คํ์ผ ์ค์ +
์ข์์ํ ์ปจํ ์ธ , ์ฌํ์ง, ์ฝ์ค ๋ณด๊ธฐ
++ ์ข์์ํ ์ปจํ ์ธ , ์ฌํ์ง, ์ฝ์ค ๋ณด๊ธฐ +
์์ฑ ๋ฐ ์ ์ฅ๋ ์ฌํ ์ฝ์ค
+์์ฑ ๋ฐ ์ ์ฅ๋ ์ฌํ ์ฝ์ค
์์ฑํ ๋ฆฌ๋ทฐ ๋ฐ ํ์ ๊ด๋ฆฌ
+์์ฑํ ๋ฆฌ๋ทฐ ๋ฐ ํ์ ๊ด๋ฆฌ