#!/usr/bin/env python3 """Generate the Tokyo Trip itinerary page (FR/EN/JA).""" import json from datetime import datetime, timezone # ─── Trip data (easily editable) ─── TRIP = { "title": {"fr": "Tokyo Trip", "en": "Tokyo Trip", "ja": "東京旅行"}, "date_label": {"fr": "Date du voyage", "en": "Trip date", "ja": "旅行日"}, "date": "", # à remplir plus tard "steps": [ { "time": "07:30", "city": "Kuwana", "station": {"fr": "Gare de Kuwana", "en": "Kuwana Station", "ja": "桑名駅"}, "action": {"fr": "Départ", "en": "Departure", "ja": "出発"}, "icon": "🚉", "note": {"fr": "Train depuis Kuwana", "en": "Train from Kuwana", "ja": "桑名から電車で出発"}, }, { "time": "08:35", "city": "Nagoya", "station": {"fr": "Gare de Nagoya", "en": "Nagoya Station", "ja": "名古屋駅"}, "action": {"fr": "Arrivée à Nagoya", "en": "Arrival at Nagoya", "ja": "名古屋到着"}, "icon": "🛬", "note": {"fr": "22 minutes avant le Shinkansen", "en": "22 minutes before Shinkansen", "ja": "新幹線まで22分"}, }, { "time": "08:57", "city": "Nagoya", "station": {"fr": "Gare de Nagoya", "en": "Nagoya Station", "ja": "名古屋駅"}, "action": {"fr": "Shinkansen pour Tokyo", "en": "Shinkansen to Tokyo", "ja": "新幹線で東京へ"}, "icon": "🚄", "note": {"fr": "Départ en Shinkansen", "en": "Shinkansen departure", "ja": "新幹線出発"}, }, { "time": "—", "city": "Tokyo", "station": {"fr": "Gare de Tokyo", "en": "Tokyo Station", "ja": "東京駅"}, "action": {"fr": "Arrivée à Tokyo", "en": "Arrival at Tokyo", "ja": "東京到着"}, "icon": "🏁", "note": {"fr": "", "en": "", "ja": ""}, }, ], } # ─── UI translations ─── I18N = { "fr": { "title": "Tokyo Trip — Itinéraire", "heading": "🚄 Tokyo Trip", "subtitle": "Itinéraire de voyage", "step": "Étape", "time": "Heure", "station": "Gare", "action": "Action", "note": "Note", "no_date": "Date à définir", "updated": "Mis à jour le", }, "en": { "title": "Tokyo Trip — Itinerary", "heading": "🚄 Tokyo Trip", "subtitle": "Travel itinerary", "step": "Step", "time": "Time", "station": "Station", "action": "Action", "note": "Note", "no_date": "Date TBD", "updated": "Updated on", }, "ja": { "title": "東京旅行 — 旅程", "heading": "🚄 東京旅行", "subtitle": "旅程表", "step": "ステップ", "time": "時刻", "station": "駅", "action": "行動", "note": "メモ", "no_date": "日付未定", "updated": "更新日時", }, } REMINDER = { "fr": "📅 Rappel : le 30 juillet, départ pour Saitama ! Chichi-bouh ! 🎉", "en": "📅 Reminder: July 30th, departure for Saitama! Chichi-bouh! 🎉", "ja": "📅 リマインダー:7月30日、埼玉へ出発!ちちぶー!🎉", } I18N_JSON = json.dumps(I18N, ensure_ascii=False) TRIP_JSON = json.dumps(TRIP, ensure_ascii=False) REMINDER_JSON = json.dumps(REMINDER, ensure_ascii=False) def generate_html(): now = datetime.now(timezone.utc) # Build step cards server-side (time, city, icon are language-independent) steps_html = [] for i, step in enumerate(TRIP["steps"]): note_html = ( f'
' if step["note"].get("fr") else "" ) steps_html.append(f"""Itinéraire de voyage