modified: app.py
modified: static/css/style.css modified: templates/base.html modified: templates/index.html modified: templates/weather.html new file: translations.py
This commit is contained in:
31
app.py
31
app.py
@@ -1,5 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from flask import Flask, render_template, request, jsonify
|
||||
from flask import Flask, render_template, request, jsonify, redirect, make_response, g
|
||||
from translations import TRANSLATIONS
|
||||
from geopy.geocoders import Nominatim
|
||||
from geopy.exc import GeocoderTimedOut
|
||||
import math
|
||||
@@ -19,6 +20,18 @@ import requests as _requests
|
||||
app = Flask(__name__)
|
||||
app.logger.setLevel(logging.INFO)
|
||||
|
||||
@app.before_request
|
||||
def _set_language():
|
||||
lang = request.cookies.get("lang", "de")
|
||||
if lang not in TRANSLATIONS:
|
||||
lang = "de"
|
||||
g.lang = lang
|
||||
g.T = TRANSLATIONS[lang]
|
||||
|
||||
@app.context_processor
|
||||
def _inject_i18n():
|
||||
return {"T": g.get("T", TRANSLATIONS["de"]), "lang": g.get("lang", "de")}
|
||||
|
||||
_GEOLOCATOR = Nominatim(user_agent="skywatcher-app/1.0")
|
||||
|
||||
# ── Zeitzone ────────────────────────────────────────────────────────────
|
||||
@@ -810,6 +823,16 @@ def filter_unrealistic_warnings(warnings, forecast, now_local=None):
|
||||
|
||||
return result
|
||||
|
||||
@app.route("/set-lang")
|
||||
def set_lang():
|
||||
lang = request.args.get("lang", "de")
|
||||
if lang not in TRANSLATIONS:
|
||||
lang = "de"
|
||||
dest = request.args.get("next") or request.referrer or "/"
|
||||
resp = make_response(redirect(dest))
|
||||
resp.set_cookie("lang", lang, max_age=60*60*24*365, samesite="Lax")
|
||||
return resp
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
return render_template("index.html")
|
||||
@@ -840,14 +863,14 @@ def wetter():
|
||||
|
||||
if lat is None:
|
||||
if not ort:
|
||||
return render_template("index.html", error="Bitte einen Ort eingeben.")
|
||||
return render_template("index.html", error=g.T["error_no_place"])
|
||||
lat, lon, display_name, state_hint, location_names = geocode_location(ort)
|
||||
if lat is None:
|
||||
return render_template("index.html", error=f'Ort "{ort}" konnte nicht gefunden werden.')
|
||||
return render_template("index.html", error=g.T["error_place_not_found"].format(ort=ort))
|
||||
loc_tz, location_tz = _get_location_tz(lat, lon)
|
||||
forecast, mosmix_station = get_mosmix_forecast(lat, lon, hours=240, loc_tz=loc_tz)
|
||||
if not forecast:
|
||||
return render_template("index.html", error="Keine Wetterdaten verfügbar. Bitte später erneut versuchen.")
|
||||
return render_template("index.html", error=g.T["error_no_data"])
|
||||
station_name = mosmix_station.get("name", ort)
|
||||
station_id = mosmix_station.get("station_id", "–")
|
||||
station_lat = float(mosmix_station.get("latitude", lat))
|
||||
|
||||
Reference in New Issue
Block a user