feat: Gezeiten im Logbuch per Open-Meteo Marine

HW/NW-Felder im Reisetag und Live-Journal mit Server-Proxy auf Basis von
Open-Meteo Marine am GPS-Standort; neueste Position und frischer DB-Stand
vor dem Abruf, Bestätigung nach Übernehmen, Accordion-Layout bereinigt.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-11 14:22:25 +02:00
parent d667062ec2
commit 5d4e498528
26 changed files with 1353 additions and 7 deletions
+16
View File
@@ -190,6 +190,22 @@
"departure": "Afgangshavn (rejse fra)",
"destination": "Ankomsthavn (til)",
"route": "Rejse fra/til",
"tides": "Tidevand",
"tide_high_water": "Højvande",
"tide_low_water": "Lavvande",
"tide_fetch_btn": "Hent tidevand",
"tide_fetch_loading": "Henter tidevand…",
"tide_disclaimer": "Ingen garanti for rigtighed — kontrollér oplysningerne mod officielle kilder!",
"tide_location_required": "Tidevandsopslag kræver en aktuel position (max. 2 timer) eller en afgangshavn.",
"tide_position_stale": "Den sidste position er ældre end 2 timer. Log position igen eller angiv afgangshavn.",
"tide_fetch_failed": "Tidevand kunne ikke hentes.",
"tide_no_data": "Ingen tidevandsdata for dette sted.",
"tide_place_not_found": "“{{place}}” kunne ikke findes — angiv en kystby eller havn.",
"tide_fetched_at_position": "Modelprognose ved aktuel position (Open-Meteo Marine).",
"tide_fetched_from": "Data fra {{place}} (ca. {{distance}} km væk)",
"tide_fetched_from_departure": "Tidevand baseret på afgang “{{place}}” (ingen aktuel GPS-position).",
"tide_applied_success": "Tidevand overført: højvande {{highWater}}, lavvande {{lowWater}}. Synligt i rejsedagseditoren under “Tidevand”.",
"tide_apply": "Anvend",
"tanks": "Tanke",
"customize_columns": "Tilpas kolonner",
"column_selector_title": "Kolonner, der skal vises",
+16
View File
@@ -190,6 +190,22 @@
"departure": "Start-Hafen (Reise von)",
"destination": "Ziel-Hafen (nach)",
"route": "Reise von/nach",
"tides": "Tiden",
"tide_high_water": "Hochwasser",
"tide_low_water": "Niedrigwasser",
"tide_fetch_btn": "Gezeiten abrufen",
"tide_fetch_loading": "Gezeiten werden geladen…",
"tide_disclaimer": "Keine Gewähr auf Richtigkeit — überprüfe die Informationen anhand offizieller Quellen!",
"tide_location_required": "Für den Gezeiten-Abruf wird eine aktuelle Position (max. 2 Stunden alt) oder ein Abfahrtsort benötigt.",
"tide_position_stale": "Die letzte Position ist älter als 2 Stunden. Bitte Position erneut setzen oder Abfahrtsort eintragen.",
"tide_fetch_failed": "Gezeiten konnten nicht abgerufen werden.",
"tide_no_data": "Für diesen Ort liegen keine Gezeitendaten vor.",
"tide_place_not_found": "„{{place}}“ konnte nicht geortet werden — bitte einen Küstenort oder Hafen angeben.",
"tide_fetched_at_position": "Modellprognose am aktuellen Standort (Open-Meteo Marine).",
"tide_fetched_from": "Daten von {{place}} (ca. {{distance}} km entfernt)",
"tide_fetched_from_departure": "Gezeiten basierend auf Abfahrtsort „{{place}}“ (keine aktuelle GPS-Position).",
"tide_applied_success": "Gezeiten übernommen: Hochwasser {{highWater}}, Niedrigwasser {{lowWater}}. Im Reisetag-Editor unter „Tiden“ sichtbar.",
"tide_apply": "Übernehmen",
"tanks": "Tanks",
"customize_columns": "Spalten anpassen",
"column_selector_title": "Anzuzeigende Spalten",
+16
View File
@@ -190,6 +190,22 @@
"departure": "Departure Port (von)",
"destination": "Destination Port (nach)",
"route": "Route / Journey",
"tides": "Tides",
"tide_high_water": "High water",
"tide_low_water": "Low water",
"tide_fetch_btn": "Fetch tides",
"tide_fetch_loading": "Loading tides…",
"tide_disclaimer": "No guarantee of accuracy — verify against official sources!",
"tide_location_required": "Tide lookup needs a current position (max. 2 hours old) or a departure port.",
"tide_position_stale": "The last position is older than 2 hours. Log position again or enter a departure port.",
"tide_fetch_failed": "Could not fetch tide data.",
"tide_no_data": "No tide data available for this location.",
"tide_place_not_found": "“{{place}}” could not be geocoded — please use a coastal place or harbour name.",
"tide_fetched_at_position": "Model forecast at current position (Open-Meteo Marine).",
"tide_fetched_from": "Data from {{place}} (about {{distance}} km away)",
"tide_fetched_from_departure": "Tides based on departure “{{place}}” (no current GPS position).",
"tide_applied_success": "Tides applied: high water {{highWater}}, low water {{lowWater}}. Visible in the travel day editor under “Tides”.",
"tide_apply": "Apply",
"tanks": "Tanks",
"customize_columns": "Customize columns",
"column_selector_title": "Columns to Show",
+16
View File
@@ -190,6 +190,22 @@
"departure": "Puerto de salida (viaje desde)",
"destination": "Puerto de destino (a)",
"route": "Viaje desde/hacia",
"tides": "Mareas",
"tide_high_water": "Pleamar",
"tide_low_water": "Bajamar",
"tide_fetch_btn": "Obtener mareas",
"tide_fetch_loading": "Cargando mareas…",
"tide_disclaimer": "Sin garantía de exactitud — comprueba con fuentes oficiales.",
"tide_location_required": "Las mareas requieren una posición actual (máx. 2 h) o un puerto de salida.",
"tide_position_stale": "La última posición tiene más de 2 horas. Registra la posición o indica el puerto de salida.",
"tide_fetch_failed": "No se pudieron obtener las mareas.",
"tide_no_data": "No hay datos de marea para este lugar.",
"tide_place_not_found": "«{{place}}» no se encontró — indica un lugar costero o puerto.",
"tide_fetched_at_position": "Pronóstico modelo en la posición actual (Open-Meteo Marine).",
"tide_fetched_from": "Datos de {{place}} (aprox. {{distance}} km)",
"tide_fetched_from_departure": "Mareas según salida «{{place}}» (sin posición GPS actual).",
"tide_applied_success": "Mareas guardadas: pleamar {{highWater}}, bajamar {{lowWater}}. Visible en el editor del día de viaje, sección «Mareas».",
"tide_apply": "Aplicar",
"tanks": "Depósitos",
"customize_columns": "Ajustar columnas",
"column_selector_title": "Columnas que se deben mostrar",
+16
View File
@@ -190,6 +190,22 @@
"departure": "Port de départ (départ de)",
"destination": "Port de destination (vers)",
"route": "Voyage au départ de/à destination de",
"tides": "Marées",
"tide_high_water": "Pleine mer",
"tide_low_water": "Basse mer",
"tide_fetch_btn": "Récupérer les marées",
"tide_fetch_loading": "Chargement des marées…",
"tide_disclaimer": "Aucune garantie d'exactitude — vérifiez auprès de sources officielles !",
"tide_location_required": "Les marées nécessitent une position actuelle (max. 2 h) ou un port de départ.",
"tide_position_stale": "La dernière position date de plus de 2 heures. Enregistrez la position ou indiquez le port de départ.",
"tide_fetch_failed": "Impossible de récupérer les marées.",
"tide_no_data": "Aucune donnée de marée pour cet endroit.",
"tide_place_not_found": "« {{place}} » introuvable — indiquez un lieu côtier ou un port.",
"tide_fetched_at_position": "Prévision modèle à la position actuelle (Open-Meteo Marine).",
"tide_fetched_from": "Données de {{place}} (env. {{distance}} km)",
"tide_fetched_from_departure": "Marées basées sur le départ « {{place}} » (pas de position GPS actuelle).",
"tide_applied_success": "Marées enregistrées : pleine mer {{highWater}}, basse mer {{lowWater}}. Visible dans l’éditeur du jour de voyage, section « Marées ».",
"tide_apply": "Appliquer",
"tanks": "Réservoirs",
"customize_columns": "Ajuster les colonnes",
"column_selector_title": "Colonnes à afficher",
+16
View File
@@ -190,6 +190,22 @@
"departure": "Avreisehavn (reise fra)",
"destination": "Ankomsthavn (til)",
"route": "Reise fra/til",
"tides": "Tidevann",
"tide_high_water": "Høyvann",
"tide_low_water": "Lavvann",
"tide_fetch_btn": "Hent tidevann",
"tide_fetch_loading": "Henter tidevann…",
"tide_disclaimer": "Ingen garanti for riktighet — kontroller opplysningene mot offisielle kilder!",
"tide_location_required": "Tidevann krever aktuell posisjon (maks 2 timer) eller avreisehavn.",
"tide_position_stale": "Siste posisjon er eldre enn 2 timer. Logg posisjon på nytt eller angi avreisehavn.",
"tide_fetch_failed": "Kunne ikke hente tidevann.",
"tide_no_data": "Ingen tidevannsdata for dette stedet.",
"tide_place_not_found": "«{{place}}» ble ikke funnet — oppgi en kyststad eller havn.",
"tide_fetched_at_position": "Modellprognose ved gjeldende posisjon (Open-Meteo Marine).",
"tide_fetched_from": "Data fra {{place}} (ca. {{distance}} km unna)",
"tide_fetched_from_departure": "Tidevann basert på avreise «{{place}}» (ingen aktuell GPS-posisjon).",
"tide_applied_success": "Tidevann lagret: høyvann {{highWater}}, lavvann {{lowWater}}. Synlig i reisedagseditoren under «Tidevann».",
"tide_apply": "Bruk",
"tanks": "Tanker",
"customize_columns": "Tilpass kolonner",
"column_selector_title": "Kolonner som skal vises",
+16
View File
@@ -190,6 +190,22 @@
"departure": "Avgångshamn (avresa från)",
"destination": "Ankomsthamn (till)",
"route": "Resa från/till",
"tides": "Tidvatten",
"tide_high_water": "Högvatten",
"tide_low_water": "Lågvatten",
"tide_fetch_btn": "Hämta tidvatten",
"tide_fetch_loading": "Hämtar tidvatten…",
"tide_disclaimer": "Ingen garanti för riktighet — verifiera mot officiella källor!",
"tide_location_required": "Tidvatten kräver aktuell position (max 2 timmar) eller avgångshamn.",
"tide_position_stale": "Senaste positionen är äldre än 2 timmar. Logga position igen eller ange avgångshamn.",
"tide_fetch_failed": "Kunde inte hämta tidvatten.",
"tide_no_data": "Inga tidvattendata för denna plats.",
"tide_place_not_found": "“{{place}}” kunde inte hittas — ange en kustort eller hamn.",
"tide_fetched_at_position": "Modellprognos vid aktuell position (Open-Meteo Marine).",
"tide_fetched_from": "Data från {{place}} (ca {{distance}} km bort)",
"tide_fetched_from_departure": "Tidvatten baserat på avgång “{{place}}” (ingen aktuell GPS-position).",
"tide_applied_success": "Tidvatten tillämpat: högvatten {{highWater}}, lågvatten {{lowWater}}. Syns i resedagseditorn under “Tidvatten”.",
"tide_apply": "Använd",
"tanks": "Tankar",
"customize_columns": "Anpassa kolumnerna",
"column_selector_title": "Kolumner som ska visas",