diff --git a/frontend/src/lib/components/LodgingModal.svelte b/frontend/src/lib/components/LodgingModal.svelte
index b7b9815..d91155c 100644
--- a/frontend/src/lib/components/LodgingModal.svelte
+++ b/frontend/src/lib/components/LodgingModal.svelte
@@ -18,10 +18,14 @@
let fullEndDate: string = '';
// Format date as local datetime
+ // Convert an ISO date to a datetime-local value in local time.
function toLocalDatetime(value: string | null): string {
if (!value) return '';
const date = new Date(value);
- return date.toISOString().slice(0, 16); // Format: YYYY-MM-DDTHH:mm
+ // Adjust the time by subtracting the timezone offset.
+ date.setMinutes(date.getMinutes() - date.getTimezoneOffset());
+ // Return format YYYY-MM-DDTHH:mm
+ return date.toISOString().slice(0, 16);
}
type LodgingType = {
@@ -111,7 +115,17 @@
return;
}
- // Create or update hotel
+ // Only convert to UTC if the time is still in local format.
+ if (lodging.check_in && !lodging.check_in.includes('Z')) {
+ // new Date(lodging.check_in) interprets the input as local time.
+ lodging.check_in = new Date(lodging.check_in).toISOString();
+ }
+ if (lodging.check_out && !lodging.check_out.includes('Z')) {
+ lodging.check_out = new Date(lodging.check_out).toISOString();
+ }
+ console.log(lodging.check_in, lodging.check_out);
+
+ // Create or update lodging...
const url = lodging.id === '' ? '/api/lodging' : `/api/lodging/${lodging.id}`;
const method = lodging.id === '' ? 'POST' : 'PATCH';
const res = await fetch(url, {
@@ -354,24 +368,45 @@
- {#if lodging.check_out}
+
+
+ {$t('lodging.check_out')}
+
- {/if}
+
+
+
+
+
+
+ {$t('lodging.current_timezone')}:
+ {(() => {
+ const tz = new Intl.DateTimeFormat().resolvedOptions().timeZone;
+ const [continent, city] = tz.split('/');
+ return `${continent} (${city.replace('_', ' ')})`;
+ })()}
+
+
diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json
index e45e5c3..a5e57d1 100644
--- a/frontend/src/locales/de.json
+++ b/frontend/src/locales/de.json
@@ -334,7 +334,7 @@
"not_visited": "Nicht besucht",
"num_countries": "Länder gefunden",
"partially_visited": "Teilweise besucht",
- "all_visited": "Sie haben alle Regionen besucht in",
+ "all_visited": "Sie haben alle Regionen besucht in",
"cities": "Städte",
"failed_to_mark_visit": "Der Besuch konnte nicht markiert werden",
"failed_to_remove_visit": "Der Besuch von konnte nicht entfernt werden",
@@ -498,7 +498,10 @@
"provide_start_date": "Bitte geben Sie ein Startdatum an",
"start": "Start",
"to_location": "Zum Standort",
- "transport_type": "Transporttyp"
+ "transport_type": "Transporttyp",
+ "ending_airport_desc": "Geben Sie den Ending Airport Code ein (z. B. lax)",
+ "fetch_location_information": "Standortinformationen abrufen",
+ "starting_airport_desc": "Geben Sie den Start -Flughafencode ein (z. B. JFK)"
},
"search": {
"adventurelog_results": "AdventureLog-Ergebnisse",
@@ -612,6 +615,7 @@
"resort": "Resort",
"start": "Start",
"type": "Typ",
- "villa": "Villa"
+ "villa": "Villa",
+ "current_timezone": "Aktuelle Zeitzone"
}
}
diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json
index 4237886..7b1eb46 100644
--- a/frontend/src/locales/en.json
+++ b/frontend/src/locales/en.json
@@ -530,7 +530,8 @@
"villa": "Villa",
"motel": "Motel",
"other": "Other",
- "reservation_number": "Reservation Number"
+ "reservation_number": "Reservation Number",
+ "current_timezone": "Current Timezone"
},
"search": {
"adventurelog_results": "AdventureLog Results",
diff --git a/frontend/src/locales/es.json b/frontend/src/locales/es.json
index 7397566..e36d958 100644
--- a/frontend/src/locales/es.json
+++ b/frontend/src/locales/es.json
@@ -498,7 +498,10 @@
"flight_number": "Número de vuelo",
"from_location": "Desde la ubicación",
"transportation_added": "¡Transporte agregado exitosamente!",
- "transportation_delete_error": "Error al eliminar el transporte"
+ "transportation_delete_error": "Error al eliminar el transporte",
+ "ending_airport_desc": "Ingrese el código de aeropuerto final (por ejemplo, LAX)",
+ "fetch_location_information": "Información de ubicación para obtener",
+ "starting_airport_desc": "Ingrese el código de aeropuerto inicial (por ejemplo, JFK)"
},
"search": {
"adventurelog_results": "Resultados del registro de aventuras",
@@ -612,6 +615,7 @@
"start": "Comenzar",
"type": "Tipo",
"villa": "Villa",
- "edit_lodging": "Editar alojamiento"
+ "edit_lodging": "Editar alojamiento",
+ "current_timezone": "Zona horaria"
}
}
diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json
index e313b9f..79ddc6c 100644
--- a/frontend/src/locales/fr.json
+++ b/frontend/src/locales/fr.json
@@ -498,7 +498,10 @@
"transportation_added": "Transport ajouté avec succès !",
"transportation_delete_error": "Erreur lors de la suppression du transport",
"transportation_deleted": "Transport supprimé avec succès !",
- "transportation_edit_success": "Transport modifié avec succès !"
+ "transportation_edit_success": "Transport modifié avec succès !",
+ "ending_airport_desc": "Entrez la fin du code aéroportuaire (par exemple, laxiste)",
+ "fetch_location_information": "Récupérer les informations de localisation",
+ "starting_airport_desc": "Entrez le code aéroport de démarrage (par exemple, JFK)"
},
"search": {
"adventurelog_results": "Résultats du journal d'aventure",
@@ -612,6 +615,7 @@
"resort": "Station balnéaire",
"start": "Commencer",
"type": "Taper",
- "villa": "Villa"
+ "villa": "Villa",
+ "current_timezone": "Fuseau horaire actuel"
}
}
diff --git a/frontend/src/locales/it.json b/frontend/src/locales/it.json
index dcd3a68..3aadbd7 100644
--- a/frontend/src/locales/it.json
+++ b/frontend/src/locales/it.json
@@ -498,7 +498,10 @@
"transportation_delete_error": "Errore durante l'eliminazione del trasporto",
"transportation_deleted": "Trasporto eliminato con successo!",
"transportation_edit_success": "Trasporti modificati con successo!",
- "type": "Tipo"
+ "type": "Tipo",
+ "ending_airport_desc": "Immettere il codice aeroportuale finale (ad es. LAX)",
+ "fetch_location_information": "Informazioni sulla posizione di recupero",
+ "starting_airport_desc": "Immettere il codice dell'aeroporto di partenza (ad es. JFK)"
},
"search": {
"adventurelog_results": "Risultati di AdventureLog",
@@ -612,6 +615,7 @@
"lodging_deleted": "Alloggio eliminato con successo!",
"lodging_edit_success": "Alloggio modificato con successo!",
"lodging_type": "Tipo di alloggio",
- "motel": "Motel"
+ "motel": "Motel",
+ "current_timezone": "Fuso orario attuale"
}
}
diff --git a/frontend/src/locales/ko.json b/frontend/src/locales/ko.json
index bd5d714..c1748d1 100644
--- a/frontend/src/locales/ko.json
+++ b/frontend/src/locales/ko.json
@@ -234,7 +234,19 @@
"will_be_marked": "모험이 저장되면 방문했다고 표시합니다.",
"checklists": "체크리스트",
"cities_updated": "도시 업데이트됨",
- "clear": "초기화"
+ "clear": "초기화",
+ "city": "도시",
+ "delete_lodging": "숙박을 삭제하십시오",
+ "display_name": "표시 이름",
+ "location_details": "위치 세부 사항",
+ "lodging": "하숙",
+ "lodging_delete_confirm": "이 숙소 위치를 삭제 하시겠습니까? \n이 조치는 취소 할 수 없습니다.",
+ "lodging_information": "숙박 정보",
+ "of": "~의",
+ "price": "가격",
+ "region": "지역",
+ "reservation_number": "예약 번호",
+ "welcome_map_info": "이 서버의 공개 모험"
},
"auth": {
"both_passwords_required": "두 암호 모두 필요합니다",
@@ -255,7 +267,11 @@
"registration_disabled": "현재 등록할 수 없습니다.",
"reset_failed": "비밀번호 재설정 실패",
"signup": "가입",
- "username": "사용자 이름"
+ "username": "사용자 이름",
+ "no_public_adventures": "공개 모험이 발견되지 않았습니다",
+ "no_public_collections": "공개 컬렉션이 발견되지 않았습니다",
+ "user_adventures": "사용자 모험",
+ "user_collections": "사용자 수집"
},
"categories": {
"category_name": "카테고리 이름",
@@ -382,7 +398,8 @@
"northernLights": "Northern Lights"
},
"users": "사용자",
- "worldtravel": "세계 여행"
+ "worldtravel": "세계 여행",
+ "admin_panel": "관리자 패널"
},
"notes": {
"add_a_link": "링크 추가",
@@ -538,7 +555,10 @@
"transportation_delete_error": "교통수단 삭제 오류",
"transportation_deleted": "교통수단이 성공적으로 삭제되었습니다!",
"transportation_edit_success": "교통수단이 성공적으로 편집되었습니다!",
- "type": "유형"
+ "type": "유형",
+ "ending_airport_desc": "엔드 공항 코드 입력 (예 : LAX)",
+ "fetch_location_information": "위치 정보를 가져 오십시오",
+ "starting_airport_desc": "공항 시작 코드 입력 (예 : JFK)"
},
"users": {
"no_users_found": "공개 프로필인 사용자가 없습니다."
@@ -566,5 +586,35 @@
"view_cities": "도시 보기",
"visit_remove_failed": "방문 표시 제거 실패",
"visit_to": "방문함"
+ },
+ "lodging": {
+ "apartment": "아파트",
+ "bnb": "숙박 및 아침 식사",
+ "cabin": "선실",
+ "campground": "캠프장",
+ "check_in": "체크인",
+ "current_timezone": "현재 시간대",
+ "date_and_time": "날짜",
+ "edit": "편집하다",
+ "edit_lodging": "숙박 편집",
+ "error_editing_lodging": "오류 편집 숙소",
+ "hostel": "숙박소",
+ "hotel": "호텔",
+ "house": "집",
+ "lodging_added": "숙박이 성공적으로 추가되었습니다!",
+ "lodging_delete_error": "오류 삭제 숙박",
+ "lodging_deleted": "숙박 시설이 성공적으로 삭제되었습니다!",
+ "lodging_edit_success": "숙박이 성공적으로 편집되었습니다!",
+ "lodging_type": "숙박 유형",
+ "motel": "모텔",
+ "new_lodging": "새로운 숙박",
+ "other": "다른",
+ "provide_start_date": "시작 날짜를 제공하십시오",
+ "reservation_number": "예약 번호",
+ "resort": "의지",
+ "start": "시작",
+ "type": "유형",
+ "villa": "별장",
+ "check_out": "체크 아웃"
}
}
diff --git a/frontend/src/locales/nl.json b/frontend/src/locales/nl.json
index d9f9f19..a74dfd7 100644
--- a/frontend/src/locales/nl.json
+++ b/frontend/src/locales/nl.json
@@ -498,7 +498,10 @@
"transport_type": "Vervoerstype",
"transportation_added": "Vervoer succesvol toegevoegd!",
"transportation_delete_error": "Fout bij verwijderen vervoer",
- "transportation_deleted": "Vervoer succesvol verwijderd!"
+ "transportation_deleted": "Vervoer succesvol verwijderd!",
+ "ending_airport_desc": "Voer eindigende luchthavencode in (bijv. LAX)",
+ "fetch_location_information": "Locatie -informatie ophalen",
+ "starting_airport_desc": "Voer de startende luchthavencode in (bijv. JFK)"
},
"search": {
"adventurelog_results": "AdventureLog-resultaten",
@@ -612,6 +615,7 @@
"resort": "Toevlucht",
"start": "Begin",
"type": "Type",
- "villa": "Villa"
+ "villa": "Villa",
+ "current_timezone": "Huidige tijdzone"
}
}
diff --git a/frontend/src/locales/pl.json b/frontend/src/locales/pl.json
index 44bf8e8..582164a 100644
--- a/frontend/src/locales/pl.json
+++ b/frontend/src/locales/pl.json
@@ -498,7 +498,10 @@
"transportation_edit_success": "Transport edytowany pomyślnie!",
"edit_transportation": "Edytuj transport",
"start": "Początek",
- "date_and_time": "Data i godzina"
+ "date_and_time": "Data i godzina",
+ "ending_airport_desc": "Wprowadź końcowe kod lotniska (np. LAX)",
+ "fetch_location_information": "Pobierać informacje o lokalizacji",
+ "starting_airport_desc": "Wprowadź początkowy kod lotniska (np. JFK)"
},
"search": {
"adventurelog_results": "Wyniki AdventureLog",
@@ -612,6 +615,7 @@
"other": "Inny",
"provide_start_date": "Proszę podać datę rozpoczęcia",
"reservation_number": "Numer rezerwacji",
- "resort": "Uciec"
+ "resort": "Uciec",
+ "current_timezone": "Obecna strefa czasowa"
}
}
diff --git a/frontend/src/locales/sv.json b/frontend/src/locales/sv.json
index 8b4cb75..6ee1e7b 100644
--- a/frontend/src/locales/sv.json
+++ b/frontend/src/locales/sv.json
@@ -498,7 +498,10 @@
"transportation_delete_error": "Det gick inte att ta bort transport",
"transportation_deleted": "Transporten har raderats!",
"transportation_edit_success": "Transporten har redigerats!",
- "type": "Typ"
+ "type": "Typ",
+ "ending_airport_desc": "Ange slut på flygplatskoden (t.ex. LAX)",
+ "fetch_location_information": "Hämta platsinformation",
+ "starting_airport_desc": "Ange start av flygplatskoden (t.ex. JFK)"
},
"search": {
"adventurelog_results": "AdventureLog-resultat",
@@ -612,6 +615,7 @@
"check_out": "Checka ut",
"date_and_time": "Datum",
"edit": "Redigera",
- "edit_lodging": "Redigera logi"
+ "edit_lodging": "Redigera logi",
+ "current_timezone": "Nuvarande tidszon"
}
}
diff --git a/frontend/src/locales/zh.json b/frontend/src/locales/zh.json
index faa9490..9a1f0d2 100644
--- a/frontend/src/locales/zh.json
+++ b/frontend/src/locales/zh.json
@@ -498,7 +498,10 @@
"transportation_delete_error": "删除交通时出错",
"transportation_deleted": "交通删除成功!",
"transportation_edit_success": "交通编辑成功!",
- "type": "类型"
+ "type": "类型",
+ "ending_airport_desc": "输入结束机场代码(例如LAX)",
+ "fetch_location_information": "获取位置信息",
+ "starting_airport_desc": "输入启动机场代码(例如肯尼迪国际机构)"
},
"search": {
"adventurelog_results": "冒险日志结果",
@@ -612,6 +615,7 @@
"other": "其他",
"provide_start_date": "请提供开始日期",
"reservation_number": "预订号",
- "resort": "采取"
+ "resort": "采取",
+ "current_timezone": "当前时区"
}
}