From b509d9fd109cd2b07b02492257978035e2e79ef2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Wojtek=20Ba=C5=BCant?=
Date: Sat, 27 Jun 2026 15:31:09 +0100
Subject: [PATCH 1/5] Hints
---
public/locales/ar.json | 12 +-
public/locales/cs.json | 12 +-
public/locales/de.json | 12 +-
public/locales/el.json | 12 +-
public/locales/en.json | 12 +-
public/locales/es.json | 12 +-
public/locales/fr.json | 12 +-
public/locales/he.json | 12 +-
public/locales/it.json | 12 +-
public/locales/ja.json | 12 +-
public/locales/nl.json | 12 +-
public/locales/pl.json | 12 +-
public/locales/pt.json | 12 +-
public/locales/ru.json | 12 +-
public/locales/sv.json | 12 +-
public/locales/tr.json | 12 +-
public/locales/uk.json | 12 +-
public/locales/vi.json | 12 +-
public/locales/zh-hans.json | 12 +-
public/locales/zh-hant.json | 12 +-
src/components/entry/EntryOverview.js | 103 ++++++---
src/components/entry/overview/Hints.js | 206 ++++++++++++++++++
src/components/entry/overview/ReportButton.js | 40 +++-
.../entry/overview/SaveToListButton.js | 6 +-
src/components/entry/useLocationPane.js | 10 +-
src/components/form/ReportModal.js | 29 ++-
src/components/form/withLabeledField.js | 5 +
src/utils/useAppHistory.js | 8 +
28 files changed, 583 insertions(+), 64 deletions(-)
create mode 100644 src/components/entry/overview/Hints.js
diff --git a/public/locales/ar.json b/public/locales/ar.json
index 864ece636..60f1aacd8 100644
--- a/public/locales/ar.json
+++ b/public/locales/ar.json
@@ -180,6 +180,15 @@
"season": "الموسم",
"season_start_to_stop_short": "إلى"
},
+ "hints": {
+ "add_description": "إضافة وصف",
+ "add_season_start": "إضافة بداية الموسم",
+ "add_season_stop": "إضافة نهاية الموسم",
+ "edit_description_eg_still_there": "تعديل الوصف: 'لا يزال موجوداً'",
+ "over_x_years_ago": "منذ أكثر من {{yearsAgo}} سنة",
+ "report_comment_placeholder_no_longer_exists": "لم يعد موجوداً",
+ "report_no_longer_exists": "الإبلاغ: لم يعد موجوداً"
+ },
"index": {
"editmarker_html": "انتقل إلى موضع المصدر. تحقق من عرض القمر الصناعي - قد يكون المصدر مرئيًا من الفضاء!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "أضيف بواسطة {{name}}",
"added_by_you": "أضيف بواسطتك",
- "date_edited": "تم التحديث في {{date}}",
+ "date_added": "تمت الإضافة {{date}}",
+ "date_last_edited": "آخر تعديل {{date}}",
"imported_from": "تم الاستيراد من {{name}}",
"season": {
"in_season": "في الموسم من {{start_month}} إلى {{stop_month}}",
diff --git a/public/locales/cs.json b/public/locales/cs.json
index 6736465ce..fa9d88810 100644
--- a/public/locales/cs.json
+++ b/public/locales/cs.json
@@ -180,6 +180,15 @@
"season": "Sezóna",
"season_start_to_stop_short": "do"
},
+ "hints": {
+ "add_description": "Přidat popis",
+ "add_season_start": "Přidat začátek sezóny",
+ "add_season_stop": "Přidat konec sezóny",
+ "edit_description_eg_still_there": "Upravit popis: 'stále tam'",
+ "over_x_years_ago": "Před více než {{yearsAgo}} lety",
+ "report_comment_placeholder_no_longer_exists": "Již neexistuje",
+ "report_no_longer_exists": "Nahlásit: již neexistuje"
+ },
"index": {
"editmarker_html": "Přesuňte na pozici zdroje. Zkontrolujte satelitní zobrazení - zdroj může být viditelný z vesmíru!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Přidal(a) {{name}}",
"added_by_you": "Přidáno vámi",
- "date_edited": "Aktualizováno {{date}}",
+ "date_added": "Přidáno {{date}}",
+ "date_last_edited": "Naposledy upraveno {{date}}",
"imported_from": "Importováno z {{name}}",
"season": {
"in_season": "V sezóně od {{start_month}} do {{stop_month}}",
diff --git a/public/locales/de.json b/public/locales/de.json
index 1e9e460bc..b92a3a03e 100644
--- a/public/locales/de.json
+++ b/public/locales/de.json
@@ -180,6 +180,15 @@
"season": "Saison",
"season_start_to_stop_short": "bis"
},
+ "hints": {
+ "add_description": "Beschreibung hinzufügen",
+ "add_season_start": "Saisonbeginn hinzufügen",
+ "add_season_stop": "Saisonende hinzufügen",
+ "edit_description_eg_still_there": "Beschreibung bearbeiten: 'noch vorhanden'",
+ "over_x_years_ago": "Vor über {{yearsAgo}} Jahren",
+ "report_comment_placeholder_no_longer_exists": "Existiert nicht mehr",
+ "report_no_longer_exists": "Melden: existiert nicht mehr"
+ },
"index": {
"editmarker_html": "Gehe zum Standort dieser Quelle. Satellitenansicht betrachten - der Standort könnte aus dem All sichtbar sein!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Hinzugefügt von {{name}}",
"added_by_you": "Von dir hinzugefügt",
- "date_edited": "Aktualisiert am {{date}}",
+ "date_added": "Hinzugefügt am {{date}}",
+ "date_last_edited": "Zuletzt bearbeitet am {{date}}",
"imported_from": "Importiert von {{name}}",
"season": {
"in_season": "Saison von {{start_month}} bis {{stop_month}}",
diff --git a/public/locales/el.json b/public/locales/el.json
index b7620bb06..f7d94f73c 100644
--- a/public/locales/el.json
+++ b/public/locales/el.json
@@ -180,6 +180,15 @@
"season": "Εποχή",
"season_start_to_stop_short": "έως"
},
+ "hints": {
+ "add_description": "Προσθήκη περιγραφής",
+ "add_season_start": "Προσθήκη έναρξης εποχής",
+ "add_season_stop": "Προσθήκη λήξης εποχής",
+ "edit_description_eg_still_there": "Επεξεργασία περιγραφής: 'εξακολουθεί να υπάρχει'",
+ "over_x_years_ago": "Πριν από πάνω από {{yearsAgo}} χρόνια",
+ "report_comment_placeholder_no_longer_exists": "Δεν υπάρχει πλέον",
+ "report_no_longer_exists": "Αναφορά: δεν υπάρχει πλέον"
+ },
"index": {
"editmarker_html": "Μετακίνηση στην θέση της πηγής. Έλεγξε την δορυφορική προβολή - η τοποθεσία μπορεί να έιναι ορατή από το διάστημα!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Προστέθηκε από {{name}}",
"added_by_you": "Προστέθηκε από εσάς",
- "date_edited": "Ενημερώθηκε {{date}}",
+ "date_added": "Προστέθηκε {{date}}",
+ "date_last_edited": "Τελευταία επεξεργασία {{date}}",
"imported_from": "Εισήχθη από {{name}}",
"season": {
"in_season": "Σε εποχή από {{start_month}} έως {{stop_month}}",
diff --git a/public/locales/en.json b/public/locales/en.json
index a67c3b838..3886e1aa8 100644
--- a/public/locales/en.json
+++ b/public/locales/en.json
@@ -180,6 +180,15 @@
"season": "Season",
"season_start_to_stop_short": "to"
},
+ "hints": {
+ "add_description": "Add description",
+ "add_season_start": "Add season start",
+ "add_season_stop": "Add season stop",
+ "edit_description_eg_still_there": "Edit description: 'still there'",
+ "over_x_years_ago": "Over {{yearsAgo}} years ago",
+ "report_no_longer_exists": "Report: no longer exists",
+ "report_comment_placeholder_no_longer_exists": "No longer exists"
+ },
"index": {
"editmarker_html": "Move to the position of the source. Check the satellite view - the source may be visible from space!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Added by {{name}}",
"added_by_you": "Added by you",
- "date_edited": "Updated {{date}}",
+ "date_added": "Added {{date}}",
+ "date_last_edited": "Last edited {{date}}",
"imported_from": "Imported from {{name}}",
"season": {
"in_season": "In season from {{start_month}} to {{stop_month}}",
diff --git a/public/locales/es.json b/public/locales/es.json
index 25409e16b..f738f74dc 100644
--- a/public/locales/es.json
+++ b/public/locales/es.json
@@ -180,6 +180,15 @@
"season": "Temporada",
"season_start_to_stop_short": "a"
},
+ "hints": {
+ "add_description": "Añadir descripción",
+ "add_season_start": "Añadir inicio de temporada",
+ "add_season_stop": "Añadir fin de temporada",
+ "edit_description_eg_still_there": "Editar descripción: 'sigue ahí'",
+ "over_x_years_ago": "Hace más de {{yearsAgo}} años",
+ "report_comment_placeholder_no_longer_exists": "Ya no existe",
+ "report_no_longer_exists": "Reportar: ya no existe"
+ },
"index": {
"editmarker_html": "Mueve a la posición del sitio. Comprueba la vista de satélite - ¡el sitio puede ser visible desde el espacio!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Añadido por {{name}}",
"added_by_you": "Añadido por ti",
- "date_edited": "Actualizado {{date}}",
+ "date_added": "Añadido el {{date}}",
+ "date_last_edited": "Última edición {{date}}",
"imported_from": "Importado de {{name}}",
"season": {
"in_season": "En temporada desde {{start_month}} hasta {{stop_month}}",
diff --git a/public/locales/fr.json b/public/locales/fr.json
index 36a1d4c18..b3cdfab60 100644
--- a/public/locales/fr.json
+++ b/public/locales/fr.json
@@ -180,6 +180,15 @@
"season": "Saison",
"season_start_to_stop_short": "à"
},
+ "hints": {
+ "add_description": "Ajouter une description",
+ "add_season_start": "Ajouter le début de saison",
+ "add_season_stop": "Ajouter la fin de saison",
+ "edit_description_eg_still_there": "Modifier la description : 'toujours là'",
+ "over_x_years_ago": "Il y a plus de {{yearsAgo}} ans",
+ "report_comment_placeholder_no_longer_exists": "N'existe plus",
+ "report_no_longer_exists": "Signaler : n'existe plus"
+ },
"index": {
"editmarker_html": "Déplacez à la position de la source. Vérifiez la vue satellite - la source pourrait être visible depuis l'espace!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Ajouté par {{name}}",
"added_by_you": "Ajouté par toi",
- "date_edited": "Modifié le {{date}}",
+ "date_added": "Ajouté le {{date}}",
+ "date_last_edited": "Dernière modification le {{date}}",
"imported_from": "Importé de {{name}}",
"season": {
"in_season": "En saison de {{start_month}} à {{stop_month}}",
diff --git a/public/locales/he.json b/public/locales/he.json
index 62381d31e..061b954e5 100644
--- a/public/locales/he.json
+++ b/public/locales/he.json
@@ -180,6 +180,15 @@
"season": "עונה",
"season_start_to_stop_short": "עד"
},
+ "hints": {
+ "add_description": "הוסף תיאור",
+ "add_season_start": "הוסף תחילת עונה",
+ "add_season_stop": "הוסף סוף עונה",
+ "edit_description_eg_still_there": "ערוך תיאור: 'עדיין שם'",
+ "over_x_years_ago": "לפני יותר מ-{{yearsAgo}} שנים",
+ "report_comment_placeholder_no_longer_exists": "כבר לא קיים",
+ "report_no_longer_exists": "דווח: כבר לא קיים"
+ },
"index": {
"editmarker_html": "עבור למיקום המקור. בדוק את תצוגת הלוויין - ייתכן שהמקור נראה מהחלל!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "נוסף על ידי {{name}}",
"added_by_you": "נוסף על ידך",
- "date_edited": "עודכן {{date}}",
+ "date_added": "נוסף ב-{{date}}",
+ "date_last_edited": "נערך לאחרונה ב-{{date}}",
"imported_from": "יובא מ {{name}}",
"season": {
"in_season": "בעונה מ {{start_month}} עד {{stop_month}}",
diff --git a/public/locales/it.json b/public/locales/it.json
index 170485bd3..4a34bc154 100644
--- a/public/locales/it.json
+++ b/public/locales/it.json
@@ -180,6 +180,15 @@
"season": "Stagione",
"season_start_to_stop_short": "a"
},
+ "hints": {
+ "add_description": "Aggiungi descrizione",
+ "add_season_start": "Aggiungi inizio stagione",
+ "add_season_stop": "Aggiungi fine stagione",
+ "edit_description_eg_still_there": "Modifica descrizione: 'ancora presente'",
+ "over_x_years_ago": "Oltre {{yearsAgo}} anni fa",
+ "report_comment_placeholder_no_longer_exists": "Non esiste più",
+ "report_no_longer_exists": "Segnala: non esiste più"
+ },
"index": {
"editmarker_html": "Sposta la posizione della sorgente. Controlla l'immagine satellitare - la fonte può essere visibile dallo spazio!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Aggiunto da {{name}}",
"added_by_you": "Aggiunto da te",
- "date_edited": "Aggiornato {{date}}",
+ "date_added": "Aggiunto il {{date}}",
+ "date_last_edited": "Ultima modifica {{date}}",
"imported_from": "Importato da {{name}}",
"season": {
"in_season": "In stagione da {{start_month}} a {{stop_month}}",
diff --git a/public/locales/ja.json b/public/locales/ja.json
index f7fad65e4..11c4ce86e 100644
--- a/public/locales/ja.json
+++ b/public/locales/ja.json
@@ -180,6 +180,15 @@
"season": "季節",
"season_start_to_stop_short": "から"
},
+ "hints": {
+ "add_description": "説明を追加",
+ "add_season_start": "シーズン開始を追加",
+ "add_season_stop": "シーズン終了を追加",
+ "edit_description_eg_still_there": "説明を編集:「まだあります」",
+ "over_x_years_ago": "{{yearsAgo}}年以上前",
+ "report_comment_placeholder_no_longer_exists": "もう存在しません",
+ "report_no_longer_exists": "報告:もう存在しません"
+ },
"index": {
"editmarker_html": "ソースの位置に移動してください。 衛星ビューを確認してください - ソースは宇宙から見えるかもしれません!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "{{name}}によって追加されました",
"added_by_you": "あなたによって追加されました",
- "date_edited": "{{date}}に更新されました",
+ "date_added": "{{date}}に追加されました",
+ "date_last_edited": "{{date}}に最終編集",
"imported_from": "{{name}}からインポートされました",
"season": {
"in_season": "{{start_month}}から{{stop_month}}まで旬です",
diff --git a/public/locales/nl.json b/public/locales/nl.json
index 7c9f87f5b..0f193bec5 100644
--- a/public/locales/nl.json
+++ b/public/locales/nl.json
@@ -180,6 +180,15 @@
"season": "Seizoen",
"season_start_to_stop_short": "tot"
},
+ "hints": {
+ "add_description": "Beschrijving toevoegen",
+ "add_season_start": "Seizoensstart toevoegen",
+ "add_season_stop": "Seizoenseinde toevoegen",
+ "edit_description_eg_still_there": "Beschrijving bewerken: 'nog steeds aanwezig'",
+ "over_x_years_ago": "Meer dan {{yearsAgo}} jaar geleden",
+ "report_comment_placeholder_no_longer_exists": "Bestaat niet meer",
+ "report_no_longer_exists": "Melden: bestaat niet meer"
+ },
"index": {
"editmarker_html": "Verplaats naar de bronlocatie. Gebruik de satellietweergave - er bestaat een kans dat de bron zichtbaar is vanuit de ruimte!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Toegevoegd door {{name}}",
"added_by_you": "Door jou toegevoegd",
- "date_edited": "Bijgewerkt {{date}}",
+ "date_added": "Toegevoegd op {{date}}",
+ "date_last_edited": "Laatst bewerkt {{date}}",
"imported_from": "Geïmporteerd van {{name}}",
"season": {
"in_season": "In seizoen van {{start_month}} tot {{stop_month}}",
diff --git a/public/locales/pl.json b/public/locales/pl.json
index 4a5fd3b2b..b852be283 100644
--- a/public/locales/pl.json
+++ b/public/locales/pl.json
@@ -180,6 +180,15 @@
"season": "Sezon",
"season_start_to_stop_short": "do"
},
+ "hints": {
+ "add_description": "Dodaj opis",
+ "add_season_start": "Dodaj początek sezonu",
+ "add_season_stop": "Dodaj koniec sezonu",
+ "edit_description_eg_still_there": "Edytuj opis: 'wciąż tam jest'",
+ "over_x_years_ago": "Ponad {{yearsAgo}} lat temu",
+ "report_comment_placeholder_no_longer_exists": "Już nie istnieje",
+ "report_no_longer_exists": "Zgłoś: już nie istnieje"
+ },
"index": {
"editmarker_html": "Przesuń do pozycji źródła. Sprawdź widok satelitarny - źródło może być widoczne z powietrza!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Dodane przez {{name}}",
"added_by_you": "Dodane przez Ciebie",
- "date_edited": "Zaktualizowano {{date}}",
+ "date_added": "Dodano {{date}}",
+ "date_last_edited": "Ostatnio edytowano {{date}}",
"imported_from": "Zaimportowane z {{name}}",
"season": {
"in_season": "W sezonie {{start_month}} - {{stop_month}}",
diff --git a/public/locales/pt.json b/public/locales/pt.json
index d77c2bdeb..ff00543c0 100644
--- a/public/locales/pt.json
+++ b/public/locales/pt.json
@@ -180,6 +180,15 @@
"season": "Estação",
"season_start_to_stop_short": "até"
},
+ "hints": {
+ "add_description": "Adicionar descrição",
+ "add_season_start": "Adicionar início da estação",
+ "add_season_stop": "Adicionar fim da estação",
+ "edit_description_eg_still_there": "Editar descrição: 'ainda existe'",
+ "over_x_years_ago": "Há mais de {{yearsAgo}} anos",
+ "report_comment_placeholder_no_longer_exists": "Não existe mais",
+ "report_no_longer_exists": "Reportar: não existe mais"
+ },
"index": {
"editmarker_html": "Mover para a código da fonte Verifique a visão por satélite - a fonte pode ser visível do espaço!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Adicionado por {{name}}",
"added_by_you": "Adicionado por você",
- "date_edited": "Atualizado {{date}}",
+ "date_added": "Adicionado em {{date}}",
+ "date_last_edited": "Última edição em {{date}}",
"imported_from": "Importado de {{name}}",
"season": {
"in_season": "Na estação de {{start_month}} até {{stop_month}}",
diff --git a/public/locales/ru.json b/public/locales/ru.json
index 7568bb06a..2a30697e8 100644
--- a/public/locales/ru.json
+++ b/public/locales/ru.json
@@ -180,6 +180,15 @@
"season": "Сезон",
"season_start_to_stop_short": "до"
},
+ "hints": {
+ "add_description": "Добавить описание",
+ "add_season_start": "Добавить начало сезона",
+ "add_season_stop": "Добавить конец сезона",
+ "edit_description_eg_still_there": "Редактировать описание: 'все еще там'",
+ "over_x_years_ago": "Более {{yearsAgo}} лет назад",
+ "report_comment_placeholder_no_longer_exists": "Больше не существует",
+ "report_no_longer_exists": "Сообщить: больше не существует"
+ },
"index": {
"editmarker_html": "Переместите в позицию источника. Проверьте спутниковый вид - источник может быть виден из космоса!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Добавлено {{name}}",
"added_by_you": "Добавлено вами",
- "date_edited": "Обновлено {{date}}",
+ "date_added": "Добавлено {{date}}",
+ "date_last_edited": "Последнее изменение {{date}}",
"imported_from": "Импортировано из {{name}}",
"season": {
"in_season": "В сезоне с {{start_month}} по {{stop_month}}",
diff --git a/public/locales/sv.json b/public/locales/sv.json
index 720a06e38..11627f2f6 100644
--- a/public/locales/sv.json
+++ b/public/locales/sv.json
@@ -180,6 +180,15 @@
"season": "Säsong",
"season_start_to_stop_short": "till"
},
+ "hints": {
+ "add_description": "Lägg till beskrivning",
+ "add_season_start": "Lägg till säsongsstart",
+ "add_season_stop": "Lägg till säsongsslut",
+ "edit_description_eg_still_there": "Redigera beskrivning: 'finns fortfarande kvar'",
+ "over_x_years_ago": "Över {{yearsAgo}} år sedan",
+ "report_comment_placeholder_no_longer_exists": "Finns inte längre",
+ "report_no_longer_exists": "Rapportera: finns inte längre"
+ },
"index": {
"editmarker_html": "Flytta till källans position. Kontrollera satellitvy - källan kan vara synlig från rymden!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Tillagd av {{name}}",
"added_by_you": "Tillagd av dig",
- "date_edited": "Uppdaterad {{date}}",
+ "date_added": "Tillagd {{date}}",
+ "date_last_edited": "Senast redigerad {{date}}",
"imported_from": "Importerad från {{name}}",
"season": {
"in_season": "I säsong från {{start_month}} till {{stop_month}}",
diff --git a/public/locales/tr.json b/public/locales/tr.json
index 740e3a2d4..2518b57db 100644
--- a/public/locales/tr.json
+++ b/public/locales/tr.json
@@ -180,6 +180,15 @@
"season": "Sezon",
"season_start_to_stop_short": "ile"
},
+ "hints": {
+ "add_description": "Açıklama ekle",
+ "add_season_start": "Sezon başlangıcını ekle",
+ "add_season_stop": "Sezon bitişini ekle",
+ "edit_description_eg_still_there": "Açıklamayı düzenle: 'hala orada'",
+ "over_x_years_ago": "{{yearsAgo}} yıldan fazla önce",
+ "report_comment_placeholder_no_longer_exists": "Artık mevcut değil",
+ "report_no_longer_exists": "Bildir: artık mevcut değil"
+ },
"index": {
"editmarker_html": "Kaynağın konumuna taşıyın. Uydu görünümünü kontrol edin - kaynak uzaydan görünür olabilir!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "{{name}} tarafından eklendi",
"added_by_you": "Sizin tarafınızdan eklendi",
- "date_edited": "{{date}} tarihinde güncellendi",
+ "date_added": "{{date}} tarihinde eklendi",
+ "date_last_edited": "Son düzenleme {{date}}",
"imported_from": "{{name}} kaynağından içe aktarıldı",
"season": {
"in_season": "{{start_month}} ile {{stop_month}} arasında mevsiminde",
diff --git a/public/locales/uk.json b/public/locales/uk.json
index 2e194632d..f8ced0996 100644
--- a/public/locales/uk.json
+++ b/public/locales/uk.json
@@ -180,6 +180,15 @@
"season": "Сезон",
"season_start_to_stop_short": "до"
},
+ "hints": {
+ "add_description": "Додати опис",
+ "add_season_start": "Додати початок сезону",
+ "add_season_stop": "Додати кінець сезону",
+ "edit_description_eg_still_there": "Редагувати опис: 'все ще там'",
+ "over_x_years_ago": "Понад {{yearsAgo}} років тому",
+ "report_comment_placeholder_no_longer_exists": "Більше не існує",
+ "report_no_longer_exists": "Повідомити: більше не існує"
+ },
"index": {
"editmarker_html": "Перемістіть до позиції джерела. Перевірте супутниковий вигляд - джерело може бути видно з космосу!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Додано користувачем {{name}}",
"added_by_you": "Додано вами",
- "date_edited": "Оновлено {{date}}",
+ "date_added": "Додано {{date}}",
+ "date_last_edited": "Востаннє редаговано {{date}}",
"imported_from": "Імпортовано з {{name}}",
"season": {
"in_season": "В сезоні з {{start_month}} по {{stop_month}}",
diff --git a/public/locales/vi.json b/public/locales/vi.json
index e99a5df4c..7bf6457a2 100644
--- a/public/locales/vi.json
+++ b/public/locales/vi.json
@@ -180,6 +180,15 @@
"season": "Mùa",
"season_start_to_stop_short": "đến"
},
+ "hints": {
+ "add_description": "Thêm mô tả",
+ "add_season_start": "Thêm mùa bắt đầu",
+ "add_season_stop": "Thêm mùa kết thúc",
+ "edit_description_eg_still_there": "Chỉnh sửa mô tả: 'vẫn còn đó'",
+ "over_x_years_ago": "Hơn {{yearsAgo}} năm trước",
+ "report_comment_placeholder_no_longer_exists": "Không còn tồn tại",
+ "report_no_longer_exists": "Báo cáo: không còn tồn tại"
+ },
"index": {
"editmarker_html": "Di chuyển đến vị trí của nguồn. Kiểm tra chế độ xem vệ tinh - nguồn có thể được nhìn thấy từ không gian!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "Được thêm bởi {{name}}",
"added_by_you": "Thêm bởi bạn",
- "date_edited": "Cập nhật {{date}}",
+ "date_added": "Đã thêm {{date}}",
+ "date_last_edited": "Chỉnh sửa lần cuối {{date}}",
"imported_from": "Được nhập từ {{name}}",
"season": {
"in_season": "Trong mùa từ {{start_month}} đến {{stop_month}}",
diff --git a/public/locales/zh-hans.json b/public/locales/zh-hans.json
index ac3b3a5c0..150c666d1 100644
--- a/public/locales/zh-hans.json
+++ b/public/locales/zh-hans.json
@@ -180,6 +180,15 @@
"season": "采摘季节",
"season_start_to_stop_short": "至"
},
+ "hints": {
+ "add_description": "添加描述",
+ "add_season_start": "添加采摘期开始时间",
+ "add_season_stop": "添加采摘期结束时间",
+ "edit_description_eg_still_there": "编辑描述:'仍然存在'",
+ "over_x_years_ago": "{{yearsAgo}}年前",
+ "report_comment_placeholder_no_longer_exists": "不再存在",
+ "report_no_longer_exists": "报告:已不存在"
+ },
"index": {
"editmarker_html": "拖动到确切位置。 建议切换到卫星视图——有时可以从空中直接看到果树!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "由 {{name}} 添加",
"added_by_you": "由你添加",
- "date_edited": "更新于 {{date}}",
+ "date_added": "添加于 {{date}}",
+ "date_last_edited": "最后编辑于 {{date}}",
"imported_from": "导入自 {{name}}",
"season": {
"in_season": "采摘期:{{start_month}} 至 {{stop_month}}",
diff --git a/public/locales/zh-hant.json b/public/locales/zh-hant.json
index b32c1aa18..0189d5903 100644
--- a/public/locales/zh-hant.json
+++ b/public/locales/zh-hant.json
@@ -180,6 +180,15 @@
"season": "季節",
"season_start_to_stop_short": "至"
},
+ "hints": {
+ "add_description": "新增描述",
+ "add_season_start": "新增季節開始",
+ "add_season_stop": "新增季節結束",
+ "edit_description_eg_still_there": "編輯描述:「仍然存在」",
+ "over_x_years_ago": "超過{{yearsAgo}}年前",
+ "report_comment_placeholder_no_longer_exists": "已不存在",
+ "report_no_longer_exists": "回報:已不存在"
+ },
"index": {
"editmarker_html": "移動到源的位置。 檢查衛星視圖 - 從太空中可以看到源!"
},
@@ -210,7 +219,8 @@
"overview": {
"added_by": "由{{name}}添加",
"added_by_you": "由您添加",
- "date_edited": "更新於{{date}}",
+ "date_added": "已於{{date}}添加",
+ "date_last_edited": "最後編輯於{{date}}",
"imported_from": "從{{name}}導入",
"season": {
"in_season": "從{{start_month}}到{{stop_month}}的季節",
diff --git a/src/components/entry/EntryOverview.js b/src/components/entry/EntryOverview.js
index 6bd67153c..de2a73d4c 100644
--- a/src/components/entry/EntryOverview.js
+++ b/src/components/entry/EntryOverview.js
@@ -1,11 +1,12 @@
import {
Calendar,
Data,
+ EditAlt as Created,
StreetView,
User,
} from '@styled-icons/boxicons-regular'
import { EditAlt, Map, User as UserYou } from '@styled-icons/boxicons-solid'
-import { useRef } from 'react'
+import { useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { Link } from 'react-router-dom'
@@ -17,6 +18,13 @@ import { useAppHistory } from '../../utils/useAppHistory'
import { useIsDesktop, useIsEmbed } from '../../utils/useBreakpoint'
import { theme } from '../ui/GlobalStyle'
import IconBesideText from '../ui/IconBesideText'
+import {
+ AddDescriptionHint,
+ AddSeasonStartHint,
+ AddSeasonStopHint,
+ StaleLocationHintActions,
+ StaleLocationHintToggle,
+} from './overview/Hints'
import { ReportButton } from './overview/ReportButton'
import SaveToListButton from './overview/SaveToListButton'
import Tags from './overview/Tags'
@@ -33,6 +41,13 @@ const hasSeasonality = (locationData) =>
locationData.season_stop != null
)
+const isSameDay = (dateStringA, dateStringB) => {
+ if (!dateStringA || !dateStringB) {
+ return false
+ }
+ return dateStringA.slice(0, 10) === dateStringB.slice(0, 10)
+}
+
// Wraps description, last updated text, and review and report buttons
const Description = styled.section`
word-break: normal;
@@ -63,6 +78,24 @@ const DisabledIconBesideText = styled(IconBesideText)`
`}
`
+const ButtonRow = styled.div`
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+`
+
+const ButtonGroupStart = styled.div`
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ gap: 10px;
+`
+
+const OverviewContainer = styled.div`
+ padding-block-end: env(safe-area-inset-bottom, 0);
+`
+
const AddressInfo = ({ locationData, onClick }) => (
@@ -109,6 +142,8 @@ const SeasonalityInfo = ({ locationData }) => {
? formatMonth(locationData.season_stop, i18n.language)
: '?',
})}
+
+
)
@@ -171,36 +206,43 @@ const AuthorInfo = ({ locationData, user }) =>
const LastEditedInfo = ({ locationData }) => {
const { t, i18n } = useTranslation()
- return (
-
-
-
-
- {t('locations.overview.date_edited', {
- date: formatISOString(locationData.updated_at, i18n.language),
- })}
-
-
-
+ const [expanded, setExpanded] = useState(false)
+ const wasCreatedSameDay = isSameDay(
+ locationData.created_at,
+ locationData.updated_at,
)
-}
-const ButtonRow = styled.div`
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
-`
-const ButtonGroupStart = styled.div`
- display: flex;
- flex-direction: row;
- align-items: center;
- gap: 10px;
-`
+ const icon = wasCreatedSameDay ? :
-const OverviewContainer = styled.div`
- padding-block-end: env(safe-area-inset-bottom, 0);
-`
+ const dateTime = wasCreatedSameDay
+ ? locationData.created_at
+ : locationData.updated_at
+
+ const label = wasCreatedSameDay
+ ? t('locations.overview.date_added', {
+ date: formatISOString(locationData.created_at, i18n.language),
+ })
+ : t('locations.overview.date_last_edited', {
+ date: formatISOString(locationData.updated_at, i18n.language),
+ })
+
+ return (
+ <>
+
+ {icon}
+
+ {label}
+
+ setExpanded((prev) => !prev)}
+ />
+
+ {expanded && }
+ >
+ )
+}
const EntryOverview = () => {
const typesAccess = useSelector((state) => state.type.typesAccess)
@@ -265,7 +307,10 @@ const EntryOverview = () => {
- {locationData.description}
+
+ {locationData.description && (
+ {locationData.description}
+ )}
theme.tertiaryText};
+
+ &:hover {
+ color: ${({ theme }) => theme.secondaryText};
+ }
+`
+const HintsContainerInline = styled.span`
+ margin-inline: 0.5em;
+`
+
+const HintsContainer = styled.div`
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ gap: 1em;
+ margin-block: 1em;
+`
+
+const OldLabelInline = styled(ResetButton)`
+ display: inline-flex;
+ align-items: center;
+ gap: 0.25em;
+ margin-inline-start: 0.5em;
+ font-style: italic;
+ color: ${({ theme }) => theme.tertiaryText};
+
+ &:hover {
+ color: ${({ theme }) => theme.secondaryText};
+ }
+`
+
+const ExistenceActionsContainer = styled.div`
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ gap: 1em;
+ margin-block-start: 0.75em;
+`
+
+export const AddDescriptionHint = ({ locationData }) => {
+ const { t } = useTranslation()
+ const history = useAppHistory()
+ const { fullyOpenPaneDrawerIfMobile } = useLocationPane()
+
+ if (locationData.description && locationData.description.trim() !== '') {
+ return null
+ }
+
+ return (
+
+ {
+ fullyOpenPaneDrawerIfMobile()
+ history.push(`/locations/${locationData.id}/edit`, {
+ focus: 'description',
+ })
+ }}
+ >
+ {t('locations.hints.add_description')}
+
+
+ )
+}
+
+export const AddSeasonStartHint = ({ locationData }) => {
+ const { t } = useTranslation()
+ const history = useAppHistory()
+ const { fullyOpenPaneDrawerIfMobile } = useLocationPane()
+
+ if (locationData.season_stop == null || locationData.season_start != null) {
+ return null
+ }
+
+ return (
+
+ {
+ fullyOpenPaneDrawerIfMobile()
+ history.push(`/locations/${locationData.id}/edit`, {
+ focus: 'season_start',
+ })
+ }}
+ >
+ {t('locations.hints.add_season_start')}
+
+
+ )
+}
+
+export const AddSeasonStopHint = ({ locationData }) => {
+ const { t } = useTranslation()
+ const history = useAppHistory()
+ const { fullyOpenPaneDrawerIfMobile } = useLocationPane()
+
+ if (locationData.season_start == null || locationData.season_stop != null) {
+ return null
+ }
+
+ return (
+
+ {
+ fullyOpenPaneDrawerIfMobile()
+ history.push(`/locations/${locationData.id}/edit`, {
+ focus: 'season_stop',
+ })
+ }}
+ >
+ {t('locations.hints.add_season_stop')}
+
+
+ )
+}
+
+export const StaleLocationHintToggle = ({
+ locationData,
+ expanded,
+ onToggle,
+}) => {
+ const { t } = useTranslation()
+ const { fullyOpenPaneDrawerIfMobile } = useLocationPane()
+
+ const updatedAt = locationData.updated_at
+ ? new Date(locationData.updated_at)
+ : null
+
+ if (!updatedAt || Date.now() - updatedAt.getTime() <= TEN_YEARS_MS) {
+ return null
+ }
+
+ const yearsAgo = Math.floor(
+ (Date.now() - updatedAt.getTime()) / (365.25 * 24 * 60 * 60 * 1000),
+ )
+
+ return (
+ {
+ e.stopPropagation()
+ fullyOpenPaneDrawerIfMobile()
+ onToggle()
+ }}
+ role="button"
+ aria-expanded={expanded}
+ >
+ {t('locations.hints.over_x_years_ago', { yearsAgo })}
+ {expanded ? : }
+
+ )
+}
+
+export const StaleLocationHintActions = ({ locationData }) => {
+ const { t } = useTranslation()
+ const history = useAppHistory()
+ const { fullyOpenPaneDrawerIfMobile } = useLocationPane()
+
+ const updatedAt = locationData.updated_at
+ ? new Date(locationData.updated_at)
+ : null
+
+ if (!updatedAt || Date.now() - updatedAt.getTime() <= TEN_YEARS_MS) {
+ return null
+ }
+ const comment = t(
+ 'locations.hints.report_comment_placeholder_no_longer_exists',
+ )
+
+ return (
+
+ {
+ fullyOpenPaneDrawerIfMobile()
+ history.push(`/locations/${locationData.id}/edit`, {
+ focus: 'description',
+ })
+ }}
+ >
+ {t('locations.hints.edit_description_eg_still_there')}
+
+ {
+ fullyOpenPaneDrawerIfMobile()
+ history.addParam('report', 'true', {
+ problem_code: 1,
+ comment: comment,
+ focus: 'comment',
+ })
+ }}
+ >
+ {t('locations.hints.report_no_longer_exists')}
+
+
+ )
+}
diff --git a/src/components/entry/overview/ReportButton.js b/src/components/entry/overview/ReportButton.js
index f08a64074..e11c8820f 100644
--- a/src/components/entry/overview/ReportButton.js
+++ b/src/components/entry/overview/ReportButton.js
@@ -1,29 +1,49 @@
import { Flag } from '@styled-icons/boxicons-solid'
-import { useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
+import { useLocation } from 'react-router-dom'
+import { useAppHistory } from '../../../utils/useAppHistory'
import { ReportModal } from '../../form/ReportModal'
import Button from '../../ui/Button'
-import useLocationPane from '../useLocationPane'
+
+const PROBLEM_TYPE_OPTIONS = [
+ { value: 0 },
+ { value: 1 },
+ { value: 2 },
+ { value: 3 },
+ { value: 4 },
+ { value: 5 },
+]
export const ReportButton = () => {
const { location: locationData } = useSelector((state) => state.location)
const { t } = useTranslation()
const typesAccess = useSelector((state) => state.type.typesAccess)
- const { drawerFullyOpen, fullyOpenPaneDrawer } = useLocationPane()
+ const history = useAppHistory()
+ const location = useLocation()
+
+ const isReportModalOpen =
+ new URLSearchParams(location.search).get('report') === 'true'
+
+ const problemCode = location.state?.problem_code ?? null
+ const defaultProblemCode =
+ problemCode != null
+ ? (PROBLEM_TYPE_OPTIONS.find((o) => o.value === problemCode) ?? null)
+ : null
+ const defaultComment = location.state?.comment ?? null
const locationName = locationData?.type_ids
.map((id) => typesAccess?.getType(id)?.commonName)
.filter(Boolean)
.join(', ')
- const [isReportModalOpen, setIsReportModalOpen] = useState(false)
const handleReportClick = () => {
- if (!drawerFullyOpen) {
- fullyOpenPaneDrawer()
- }
- setIsReportModalOpen(true)
+ history.addParam('report', 'true')
+ }
+
+ const handleDismiss = () => {
+ history.removeParam('report')
}
return (
@@ -33,7 +53,9 @@ export const ReportButton = () => {
locationId={locationData.id}
title={`${t('form.button.report')} ${locationName}`}
name={locationName}
- onDismiss={() => setIsReportModalOpen(false)}
+ onDismiss={handleDismiss}
+ defaultProblemCode={defaultProblemCode}
+ defaultComment={defaultComment}
/>
)}
} secondary onClick={handleReportClick}>
diff --git a/src/components/entry/overview/SaveToListButton.js b/src/components/entry/overview/SaveToListButton.js
index 9b344e991..f5e3e904a 100644
--- a/src/components/entry/overview/SaveToListButton.js
+++ b/src/components/entry/overview/SaveToListButton.js
@@ -172,7 +172,7 @@ const SaveToListButton = ({ containerRef }) => {
const addNewRowRef = useRef(null)
const { lists } = useSavedLists(locationId)
- const { drawerFullyOpen, fullyOpenPaneDrawer } = useLocationPane()
+ const { fullyOpenPaneDrawerIfMobile } = useLocationPane()
useEffect(() => {
const handleClickOutside = (e) => {
@@ -234,9 +234,7 @@ const SaveToListButton = ({ containerRef }) => {
}, [isAddingNew])
const handleButtonClick = () => {
- if (!drawerFullyOpen) {
- fullyOpenPaneDrawer()
- }
+ fullyOpenPaneDrawerIfMobile()
if (!open) {
dispatch(fetchLists())
}
diff --git a/src/components/entry/useLocationPane.js b/src/components/entry/useLocationPane.js
index b14bb0864..bddfe5045 100644
--- a/src/components/entry/useLocationPane.js
+++ b/src/components/entry/useLocationPane.js
@@ -1,12 +1,13 @@
import { useCallback } from 'react'
import { useHistory, useLocation } from 'react-router-dom'
-import { useIsEmbed } from '../../utils/useBreakpoint'
+import { useIsDesktop, useIsEmbed } from '../../utils/useBreakpoint'
const useLocationPane = () => {
const history = useHistory()
const { search, pathname } = useLocation()
const isEmbed = useIsEmbed()
+ const isDesktop = useIsDesktop()
const params = new URLSearchParams(search)
const paneParam = params.get('pane') // 'low' | 'full' | null -> middle position
@@ -66,6 +67,12 @@ const useLocationPane = () => {
setPaneParam('full')
}, [setPaneParam])
+ const fullyOpenPaneDrawerIfMobile = useCallback(() => {
+ if (!isDesktop) {
+ fullyOpenPaneDrawer()
+ }
+ }, [isDesktop, fullyOpenPaneDrawer])
+
const setPaneDrawerToMiddlePosition = useCallback(() => {
setPaneParam(null)
}, [setPaneParam])
@@ -86,6 +93,7 @@ const useLocationPane = () => {
drawerLow,
tabIndex,
fullyOpenPaneDrawer,
+ fullyOpenPaneDrawerIfMobile,
setPaneDrawerToMiddlePosition,
setPaneDrawerToLowPosition,
setTabIndex,
diff --git a/src/components/form/ReportModal.js b/src/components/form/ReportModal.js
index a8ae31a85..af98185b7 100644
--- a/src/components/form/ReportModal.js
+++ b/src/components/form/ReportModal.js
@@ -1,3 +1,5 @@
+import { useFormikContext } from 'formik'
+import { useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { toast } from 'react-toastify'
@@ -7,7 +9,26 @@ import { addReport } from '../../utils/api'
import Modal from '../ui/Modal'
import { Input, Recaptcha, Select, Textarea } from './FormikWrappers'
-const ReportModal = ({ locationId, title, onDismiss, ...props }) => {
+const SetInitialValue = ({ name, value }) => {
+ //Set the value programmatically to the form submittable afterwards
+ const { setFieldValue } = useFormikContext()
+ useEffect(() => {
+ if (value != null) {
+ setFieldValue(name, value, true)
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [])
+ return null
+}
+
+const ReportModal = ({
+ locationId,
+ title,
+ onDismiss,
+ defaultProblemCode,
+ defaultComment,
+ ...props
+}) => {
const isLoggedIn = useSelector((state) => !!state.auth.user)
const { t } = useTranslation()
@@ -68,6 +89,12 @@ const ReportModal = ({ locationId, title, onDismiss, ...props }) => {
onSubmit={handleSubmit}
{...props}
>
+ {defaultProblemCode != null && (
+
+ )}
+ {defaultComment != null && (
+
+ )}
{
meta.error = false
}
+ const { state } = useLocation()
+ const autoFocus = state?.focus != null && state.focus === props.name
+
return (
diff --git a/src/utils/useAppHistory.js b/src/utils/useAppHistory.js
index 5a4ce8ae3..c217deb7c 100644
--- a/src/utils/useAppHistory.js
+++ b/src/utils/useAppHistory.js
@@ -1,6 +1,7 @@
import { useHistory, useLocation } from 'react-router-dom'
import {
+ addParam,
currentPathWithView,
pathToSignInPage,
pathWithCurrentView,
@@ -54,6 +55,12 @@ export const useAppHistory = () => {
history.replace(newPath)
}
+ const addParamToHistory = (paramName, paramValue, state) => {
+ const currentPath = `${location.pathname}${location.search}`
+ const newPath = addParam(currentPath, paramName, paramValue)
+ history.push(newPath, state)
+ }
+
const pushToSignInPage = () => {
const signInPath = pathToSignInPage()
history.push(signInPath)
@@ -71,6 +78,7 @@ export const useAppHistory = () => {
syncViewToBrowserUrl,
replaceView,
removeParam,
+ addParam: addParamToHistory,
pushToSignInPage,
pushAndChangeView,
}
From a0938e6e39e6ac3f38512cfcc425bb6f5388786f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Wojtek=20Ba=C5=BCant?=
Date: Wed, 8 Jul 2026 13:34:57 +0100
Subject: [PATCH 2/5] Hints review
---
public/locales/ar.json | 11 ++---
public/locales/cs.json | 9 +++--
public/locales/de.json | 9 +++--
public/locales/el.json | 9 +++--
public/locales/en.json | 9 +++--
public/locales/es.json | 9 +++--
public/locales/fr.json | 9 +++--
public/locales/he.json | 11 ++---
public/locales/it.json | 9 +++--
public/locales/ja.json | 11 ++---
public/locales/nl.json | 9 +++--
public/locales/pl.json | 9 +++--
public/locales/pt.json | 9 +++--
public/locales/ru.json | 9 +++--
public/locales/sv.json | 9 +++--
public/locales/tr.json | 11 ++---
public/locales/uk.json | 9 +++--
public/locales/vi.json | 9 +++--
public/locales/zh-hans.json | 9 +++--
public/locales/zh-hant.json | 11 ++---
scripts/less | 0
scripts/translation_manager.py | 10 ++++-
src/components/entry/EntryOverview.js | 56 ++++++++++++++------------
src/components/entry/overview/Hints.js | 30 +++++++-------
src/components/form/ReportModal.js | 15 +------
src/components/form/ReviewForm.js | 7 ++++
src/components/form/SetInitialValue.js | 15 +++++++
src/components/ui/IconBesideText.js | 9 +++--
src/redux/locationSlice.js | 33 ++++++++++++++-
29 files changed, 220 insertions(+), 145 deletions(-)
delete mode 100644 scripts/less
create mode 100644 src/components/form/SetInitialValue.js
diff --git a/public/locales/ar.json b/public/locales/ar.json
index 60f1aacd8..fdc2ea096 100644
--- a/public/locales/ar.json
+++ b/public/locales/ar.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "إضافة وصف",
+ "add_season_end": "إضافة نهاية الموسم",
"add_season_start": "إضافة بداية الموسم",
- "add_season_stop": "إضافة نهاية الموسم",
- "edit_description_eg_still_there": "تعديل الوصف: 'لا يزال موجوداً'",
+ "confirm_still_exists": "تأكيد أنه لا يزال موجوداً",
"over_x_years_ago": "منذ أكثر من {{yearsAgo}} سنة",
- "report_comment_placeholder_no_longer_exists": "لم يعد موجوداً",
- "report_no_longer_exists": "الإبلاغ: لم يعد موجوداً"
+ "report_comment_placeholder_no_longer_exists": "لم يعد موجودًا",
+ "report_no_longer_exists": "الإبلاغ عن عدم وجوده",
+ "review_comment_placeholder_still_exists": "لا يزال موجودًا!"
},
"index": {
"editmarker_html": "انتقل إلى موضع المصدر. تحقق من عرض القمر الصناعي - قد يكون المصدر مرئيًا من الفضاء!"
@@ -220,7 +221,7 @@
"added_by": "أضيف بواسطة {{name}}",
"added_by_you": "أضيف بواسطتك",
"date_added": "تمت الإضافة {{date}}",
- "date_last_edited": "آخر تعديل {{date}}",
+ "date_last_updated": "آخر تحديث {{date}}",
"imported_from": "تم الاستيراد من {{name}}",
"season": {
"in_season": "في الموسم من {{start_month}} إلى {{stop_month}}",
diff --git a/public/locales/cs.json b/public/locales/cs.json
index fa9d88810..1cc435a3d 100644
--- a/public/locales/cs.json
+++ b/public/locales/cs.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Přidat popis",
+ "add_season_end": "Přidat konec sezóny",
"add_season_start": "Přidat začátek sezóny",
- "add_season_stop": "Přidat konec sezóny",
- "edit_description_eg_still_there": "Upravit popis: 'stále tam'",
+ "confirm_still_exists": "Potvrdit, že stále existuje",
"over_x_years_ago": "Před více než {{yearsAgo}} lety",
"report_comment_placeholder_no_longer_exists": "Již neexistuje",
- "report_no_longer_exists": "Nahlásit: již neexistuje"
+ "report_no_longer_exists": "Nahlásit, že již neexistuje",
+ "review_comment_placeholder_still_exists": "Stále tam je!"
},
"index": {
"editmarker_html": "Přesuňte na pozici zdroje. Zkontrolujte satelitní zobrazení - zdroj může být viditelný z vesmíru!"
@@ -220,7 +221,7 @@
"added_by": "Přidal(a) {{name}}",
"added_by_you": "Přidáno vámi",
"date_added": "Přidáno {{date}}",
- "date_last_edited": "Naposledy upraveno {{date}}",
+ "date_last_updated": "Naposledy aktualizováno {{date}}",
"imported_from": "Importováno z {{name}}",
"season": {
"in_season": "V sezóně od {{start_month}} do {{stop_month}}",
diff --git a/public/locales/de.json b/public/locales/de.json
index b92a3a03e..d80cbf718 100644
--- a/public/locales/de.json
+++ b/public/locales/de.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Beschreibung hinzufügen",
+ "add_season_end": "Saisonende hinzufügen",
"add_season_start": "Saisonbeginn hinzufügen",
- "add_season_stop": "Saisonende hinzufügen",
- "edit_description_eg_still_there": "Beschreibung bearbeiten: 'noch vorhanden'",
+ "confirm_still_exists": "Bestätigen, dass es noch existiert",
"over_x_years_ago": "Vor über {{yearsAgo}} Jahren",
"report_comment_placeholder_no_longer_exists": "Existiert nicht mehr",
- "report_no_longer_exists": "Melden: existiert nicht mehr"
+ "report_no_longer_exists": "Melden, dass es nicht mehr existiert",
+ "review_comment_placeholder_still_exists": "Immer noch da!"
},
"index": {
"editmarker_html": "Gehe zum Standort dieser Quelle. Satellitenansicht betrachten - der Standort könnte aus dem All sichtbar sein!"
@@ -220,7 +221,7 @@
"added_by": "Hinzugefügt von {{name}}",
"added_by_you": "Von dir hinzugefügt",
"date_added": "Hinzugefügt am {{date}}",
- "date_last_edited": "Zuletzt bearbeitet am {{date}}",
+ "date_last_updated": "Zuletzt aktualisiert {{date}}",
"imported_from": "Importiert von {{name}}",
"season": {
"in_season": "Saison von {{start_month}} bis {{stop_month}}",
diff --git a/public/locales/el.json b/public/locales/el.json
index f7d94f73c..5a91f1ed7 100644
--- a/public/locales/el.json
+++ b/public/locales/el.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Προσθήκη περιγραφής",
+ "add_season_end": "Προσθήκη λήξης περιόδου",
"add_season_start": "Προσθήκη έναρξης εποχής",
- "add_season_stop": "Προσθήκη λήξης εποχής",
- "edit_description_eg_still_there": "Επεξεργασία περιγραφής: 'εξακολουθεί να υπάρχει'",
+ "confirm_still_exists": "Επιβεβαίωση ότι εξακολουθεί να υπάρχει",
"over_x_years_ago": "Πριν από πάνω από {{yearsAgo}} χρόνια",
"report_comment_placeholder_no_longer_exists": "Δεν υπάρχει πλέον",
- "report_no_longer_exists": "Αναφορά: δεν υπάρχει πλέον"
+ "report_no_longer_exists": "Αναφορά ότι δεν υπάρχει πλέον",
+ "review_comment_placeholder_still_exists": "Εξακολουθεί να υπάρχει!"
},
"index": {
"editmarker_html": "Μετακίνηση στην θέση της πηγής. Έλεγξε την δορυφορική προβολή - η τοποθεσία μπορεί να έιναι ορατή από το διάστημα!"
@@ -220,7 +221,7 @@
"added_by": "Προστέθηκε από {{name}}",
"added_by_you": "Προστέθηκε από εσάς",
"date_added": "Προστέθηκε {{date}}",
- "date_last_edited": "Τελευταία επεξεργασία {{date}}",
+ "date_last_updated": "Τελευταία ενημέρωση {{date}}",
"imported_from": "Εισήχθη από {{name}}",
"season": {
"in_season": "Σε εποχή από {{start_month}} έως {{stop_month}}",
diff --git a/public/locales/en.json b/public/locales/en.json
index 3886e1aa8..ce35ba5fb 100644
--- a/public/locales/en.json
+++ b/public/locales/en.json
@@ -182,11 +182,12 @@
},
"hints": {
"add_description": "Add description",
+ "add_season_end": "Add season end",
"add_season_start": "Add season start",
- "add_season_stop": "Add season stop",
- "edit_description_eg_still_there": "Edit description: 'still there'",
+ "confirm_still_exists": "Confirm still exists",
"over_x_years_ago": "Over {{yearsAgo}} years ago",
- "report_no_longer_exists": "Report: no longer exists",
+ "review_comment_placeholder_still_exists": "Still there!",
+ "report_no_longer_exists": "Report no longer exists",
"report_comment_placeholder_no_longer_exists": "No longer exists"
},
"index": {
@@ -220,7 +221,7 @@
"added_by": "Added by {{name}}",
"added_by_you": "Added by you",
"date_added": "Added {{date}}",
- "date_last_edited": "Last edited {{date}}",
+ "date_last_updated": "Last updated {{date}}",
"imported_from": "Imported from {{name}}",
"season": {
"in_season": "In season from {{start_month}} to {{stop_month}}",
diff --git a/public/locales/es.json b/public/locales/es.json
index f738f74dc..8d7f0c7b5 100644
--- a/public/locales/es.json
+++ b/public/locales/es.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Añadir descripción",
+ "add_season_end": "Añadir fin de temporada",
"add_season_start": "Añadir inicio de temporada",
- "add_season_stop": "Añadir fin de temporada",
- "edit_description_eg_still_there": "Editar descripción: 'sigue ahí'",
+ "confirm_still_exists": "Confirmar que aún existe",
"over_x_years_ago": "Hace más de {{yearsAgo}} años",
"report_comment_placeholder_no_longer_exists": "Ya no existe",
- "report_no_longer_exists": "Reportar: ya no existe"
+ "report_no_longer_exists": "Reportar que ya no existe",
+ "review_comment_placeholder_still_exists": "¡Todavía está ahí!"
},
"index": {
"editmarker_html": "Mueve a la posición del sitio. Comprueba la vista de satélite - ¡el sitio puede ser visible desde el espacio!"
@@ -220,7 +221,7 @@
"added_by": "Añadido por {{name}}",
"added_by_you": "Añadido por ti",
"date_added": "Añadido el {{date}}",
- "date_last_edited": "Última edición {{date}}",
+ "date_last_updated": "Última actualización {{date}}",
"imported_from": "Importado de {{name}}",
"season": {
"in_season": "En temporada desde {{start_month}} hasta {{stop_month}}",
diff --git a/public/locales/fr.json b/public/locales/fr.json
index b3cdfab60..85c54561f 100644
--- a/public/locales/fr.json
+++ b/public/locales/fr.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Ajouter une description",
+ "add_season_end": "Ajouter la fin de saison",
"add_season_start": "Ajouter le début de saison",
- "add_season_stop": "Ajouter la fin de saison",
- "edit_description_eg_still_there": "Modifier la description : 'toujours là'",
+ "confirm_still_exists": "Confirmer qu'il existe toujours",
"over_x_years_ago": "Il y a plus de {{yearsAgo}} ans",
"report_comment_placeholder_no_longer_exists": "N'existe plus",
- "report_no_longer_exists": "Signaler : n'existe plus"
+ "report_no_longer_exists": "Signaler qu'il n'existe plus",
+ "review_comment_placeholder_still_exists": "Toujours là !"
},
"index": {
"editmarker_html": "Déplacez à la position de la source. Vérifiez la vue satellite - la source pourrait être visible depuis l'espace!"
@@ -220,7 +221,7 @@
"added_by": "Ajouté par {{name}}",
"added_by_you": "Ajouté par toi",
"date_added": "Ajouté le {{date}}",
- "date_last_edited": "Dernière modification le {{date}}",
+ "date_last_updated": "Dernière mise à jour {{date}}",
"imported_from": "Importé de {{name}}",
"season": {
"in_season": "En saison de {{start_month}} à {{stop_month}}",
diff --git a/public/locales/he.json b/public/locales/he.json
index 061b954e5..07fade743 100644
--- a/public/locales/he.json
+++ b/public/locales/he.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "הוסף תיאור",
+ "add_season_end": "הוסף סוף עונה",
"add_season_start": "הוסף תחילת עונה",
- "add_season_stop": "הוסף סוף עונה",
- "edit_description_eg_still_there": "ערוך תיאור: 'עדיין שם'",
+ "confirm_still_exists": "אשר שעדיין קיים",
"over_x_years_ago": "לפני יותר מ-{{yearsAgo}} שנים",
- "report_comment_placeholder_no_longer_exists": "כבר לא קיים",
- "report_no_longer_exists": "דווח: כבר לא קיים"
+ "report_comment_placeholder_no_longer_exists": "לא קיים יותר",
+ "report_no_longer_exists": "דווח שלא קיים יותר",
+ "review_comment_placeholder_still_exists": "עדיין שם!"
},
"index": {
"editmarker_html": "עבור למיקום המקור. בדוק את תצוגת הלוויין - ייתכן שהמקור נראה מהחלל!"
@@ -220,7 +221,7 @@
"added_by": "נוסף על ידי {{name}}",
"added_by_you": "נוסף על ידך",
"date_added": "נוסף ב-{{date}}",
- "date_last_edited": "נערך לאחרונה ב-{{date}}",
+ "date_last_updated": "עודכן לאחרונה ב-{{date}}",
"imported_from": "יובא מ {{name}}",
"season": {
"in_season": "בעונה מ {{start_month}} עד {{stop_month}}",
diff --git a/public/locales/it.json b/public/locales/it.json
index 4a34bc154..83f318d0c 100644
--- a/public/locales/it.json
+++ b/public/locales/it.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Aggiungi descrizione",
+ "add_season_end": "Aggiungi fine stagione",
"add_season_start": "Aggiungi inizio stagione",
- "add_season_stop": "Aggiungi fine stagione",
- "edit_description_eg_still_there": "Modifica descrizione: 'ancora presente'",
+ "confirm_still_exists": "Conferma che esiste ancora",
"over_x_years_ago": "Oltre {{yearsAgo}} anni fa",
"report_comment_placeholder_no_longer_exists": "Non esiste più",
- "report_no_longer_exists": "Segnala: non esiste più"
+ "report_no_longer_exists": "Segnala che non esiste più",
+ "review_comment_placeholder_still_exists": "Ancora presente!"
},
"index": {
"editmarker_html": "Sposta la posizione della sorgente. Controlla l'immagine satellitare - la fonte può essere visibile dallo spazio!"
@@ -220,7 +221,7 @@
"added_by": "Aggiunto da {{name}}",
"added_by_you": "Aggiunto da te",
"date_added": "Aggiunto il {{date}}",
- "date_last_edited": "Ultima modifica {{date}}",
+ "date_last_updated": "Ultimo aggiornamento {{date}}",
"imported_from": "Importato da {{name}}",
"season": {
"in_season": "In stagione da {{start_month}} a {{stop_month}}",
diff --git a/public/locales/ja.json b/public/locales/ja.json
index 11c4ce86e..db7b61ceb 100644
--- a/public/locales/ja.json
+++ b/public/locales/ja.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "説明を追加",
+ "add_season_end": "シーズン終了日を追加",
"add_season_start": "シーズン開始を追加",
- "add_season_stop": "シーズン終了を追加",
- "edit_description_eg_still_there": "説明を編集:「まだあります」",
+ "confirm_still_exists": "まだ存在することを確認",
"over_x_years_ago": "{{yearsAgo}}年以上前",
- "report_comment_placeholder_no_longer_exists": "もう存在しません",
- "report_no_longer_exists": "報告:もう存在しません"
+ "report_comment_placeholder_no_longer_exists": "存在しなくなりました",
+ "report_no_longer_exists": "存在しなくなったことを報告",
+ "review_comment_placeholder_still_exists": "まだあります!"
},
"index": {
"editmarker_html": "ソースの位置に移動してください。 衛星ビューを確認してください - ソースは宇宙から見えるかもしれません!"
@@ -220,7 +221,7 @@
"added_by": "{{name}}によって追加されました",
"added_by_you": "あなたによって追加されました",
"date_added": "{{date}}に追加されました",
- "date_last_edited": "{{date}}に最終編集",
+ "date_last_updated": "最終更新日 {{date}}",
"imported_from": "{{name}}からインポートされました",
"season": {
"in_season": "{{start_month}}から{{stop_month}}まで旬です",
diff --git a/public/locales/nl.json b/public/locales/nl.json
index 0f193bec5..d210bc1c2 100644
--- a/public/locales/nl.json
+++ b/public/locales/nl.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Beschrijving toevoegen",
+ "add_season_end": "Seizoenseinde toevoegen",
"add_season_start": "Seizoensstart toevoegen",
- "add_season_stop": "Seizoenseinde toevoegen",
- "edit_description_eg_still_there": "Beschrijving bewerken: 'nog steeds aanwezig'",
+ "confirm_still_exists": "Bevestig dat het nog bestaat",
"over_x_years_ago": "Meer dan {{yearsAgo}} jaar geleden",
"report_comment_placeholder_no_longer_exists": "Bestaat niet meer",
- "report_no_longer_exists": "Melden: bestaat niet meer"
+ "report_no_longer_exists": "Meld dat het niet meer bestaat",
+ "review_comment_placeholder_still_exists": "Nog steeds daar!"
},
"index": {
"editmarker_html": "Verplaats naar de bronlocatie. Gebruik de satellietweergave - er bestaat een kans dat de bron zichtbaar is vanuit de ruimte!"
@@ -220,7 +221,7 @@
"added_by": "Toegevoegd door {{name}}",
"added_by_you": "Door jou toegevoegd",
"date_added": "Toegevoegd op {{date}}",
- "date_last_edited": "Laatst bewerkt {{date}}",
+ "date_last_updated": "Laatst bijgewerkt {{date}}",
"imported_from": "Geïmporteerd van {{name}}",
"season": {
"in_season": "In seizoen van {{start_month}} tot {{stop_month}}",
diff --git a/public/locales/pl.json b/public/locales/pl.json
index b852be283..d6acbe0de 100644
--- a/public/locales/pl.json
+++ b/public/locales/pl.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Dodaj opis",
+ "add_season_end": "Dodaj koniec sezonu",
"add_season_start": "Dodaj początek sezonu",
- "add_season_stop": "Dodaj koniec sezonu",
- "edit_description_eg_still_there": "Edytuj opis: 'wciąż tam jest'",
+ "confirm_still_exists": "Potwierdź, że nadal istnieje",
"over_x_years_ago": "Ponad {{yearsAgo}} lat temu",
"report_comment_placeholder_no_longer_exists": "Już nie istnieje",
- "report_no_longer_exists": "Zgłoś: już nie istnieje"
+ "report_no_longer_exists": "Zgłoś, że już nie istnieje",
+ "review_comment_placeholder_still_exists": "Wciąż tam jest!"
},
"index": {
"editmarker_html": "Przesuń do pozycji źródła. Sprawdź widok satelitarny - źródło może być widoczne z powietrza!"
@@ -220,7 +221,7 @@
"added_by": "Dodane przez {{name}}",
"added_by_you": "Dodane przez Ciebie",
"date_added": "Dodano {{date}}",
- "date_last_edited": "Ostatnio edytowano {{date}}",
+ "date_last_updated": "Ostatnia aktualizacja {{date}}",
"imported_from": "Zaimportowane z {{name}}",
"season": {
"in_season": "W sezonie {{start_month}} - {{stop_month}}",
diff --git a/public/locales/pt.json b/public/locales/pt.json
index ff00543c0..e7af03cad 100644
--- a/public/locales/pt.json
+++ b/public/locales/pt.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Adicionar descrição",
+ "add_season_end": "Adicionar fim da temporada",
"add_season_start": "Adicionar início da estação",
- "add_season_stop": "Adicionar fim da estação",
- "edit_description_eg_still_there": "Editar descrição: 'ainda existe'",
+ "confirm_still_exists": "Confirmar que ainda existe",
"over_x_years_ago": "Há mais de {{yearsAgo}} anos",
"report_comment_placeholder_no_longer_exists": "Não existe mais",
- "report_no_longer_exists": "Reportar: não existe mais"
+ "report_no_longer_exists": "Reportar que não existe mais",
+ "review_comment_placeholder_still_exists": "Ainda está lá!"
},
"index": {
"editmarker_html": "Mover para a código da fonte Verifique a visão por satélite - a fonte pode ser visível do espaço!"
@@ -220,7 +221,7 @@
"added_by": "Adicionado por {{name}}",
"added_by_you": "Adicionado por você",
"date_added": "Adicionado em {{date}}",
- "date_last_edited": "Última edição em {{date}}",
+ "date_last_updated": "Última atualização {{date}}",
"imported_from": "Importado de {{name}}",
"season": {
"in_season": "Na estação de {{start_month}} até {{stop_month}}",
diff --git a/public/locales/ru.json b/public/locales/ru.json
index 2a30697e8..8bca666d8 100644
--- a/public/locales/ru.json
+++ b/public/locales/ru.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Добавить описание",
+ "add_season_end": "Добавить конец сезона",
"add_season_start": "Добавить начало сезона",
- "add_season_stop": "Добавить конец сезона",
- "edit_description_eg_still_there": "Редактировать описание: 'все еще там'",
+ "confirm_still_exists": "Подтвердить, что существует",
"over_x_years_ago": "Более {{yearsAgo}} лет назад",
"report_comment_placeholder_no_longer_exists": "Больше не существует",
- "report_no_longer_exists": "Сообщить: больше не существует"
+ "report_no_longer_exists": "Сообщить, что больше не существует",
+ "review_comment_placeholder_still_exists": "Всё ещё здесь!"
},
"index": {
"editmarker_html": "Переместите в позицию источника. Проверьте спутниковый вид - источник может быть виден из космоса!"
@@ -220,7 +221,7 @@
"added_by": "Добавлено {{name}}",
"added_by_you": "Добавлено вами",
"date_added": "Добавлено {{date}}",
- "date_last_edited": "Последнее изменение {{date}}",
+ "date_last_updated": "Последнее обновление {{date}}",
"imported_from": "Импортировано из {{name}}",
"season": {
"in_season": "В сезоне с {{start_month}} по {{stop_month}}",
diff --git a/public/locales/sv.json b/public/locales/sv.json
index 11627f2f6..cce7075d7 100644
--- a/public/locales/sv.json
+++ b/public/locales/sv.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Lägg till beskrivning",
+ "add_season_end": "Lägg till säsongsslut",
"add_season_start": "Lägg till säsongsstart",
- "add_season_stop": "Lägg till säsongsslut",
- "edit_description_eg_still_there": "Redigera beskrivning: 'finns fortfarande kvar'",
+ "confirm_still_exists": "Bekräfta att den fortfarande finns",
"over_x_years_ago": "Över {{yearsAgo}} år sedan",
"report_comment_placeholder_no_longer_exists": "Finns inte längre",
- "report_no_longer_exists": "Rapportera: finns inte längre"
+ "report_no_longer_exists": "Rapportera att den inte längre finns",
+ "review_comment_placeholder_still_exists": "Finns fortfarande där!"
},
"index": {
"editmarker_html": "Flytta till källans position. Kontrollera satellitvy - källan kan vara synlig från rymden!"
@@ -220,7 +221,7 @@
"added_by": "Tillagd av {{name}}",
"added_by_you": "Tillagd av dig",
"date_added": "Tillagd {{date}}",
- "date_last_edited": "Senast redigerad {{date}}",
+ "date_last_updated": "Senast uppdaterad {{date}}",
"imported_from": "Importerad från {{name}}",
"season": {
"in_season": "I säsong från {{start_month}} till {{stop_month}}",
diff --git a/public/locales/tr.json b/public/locales/tr.json
index 2518b57db..88b5a4f29 100644
--- a/public/locales/tr.json
+++ b/public/locales/tr.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Açıklama ekle",
+ "add_season_end": "Sezon sonu ekle",
"add_season_start": "Sezon başlangıcını ekle",
- "add_season_stop": "Sezon bitişini ekle",
- "edit_description_eg_still_there": "Açıklamayı düzenle: 'hala orada'",
+ "confirm_still_exists": "Hala var olduğunu onayla",
"over_x_years_ago": "{{yearsAgo}} yıldan fazla önce",
- "report_comment_placeholder_no_longer_exists": "Artık mevcut değil",
- "report_no_longer_exists": "Bildir: artık mevcut değil"
+ "report_comment_placeholder_no_longer_exists": "Artık var olmadığını bildir",
+ "report_no_longer_exists": "Artık var olmadığını bildir",
+ "review_comment_placeholder_still_exists": "Hâlâ orada!"
},
"index": {
"editmarker_html": "Kaynağın konumuna taşıyın. Uydu görünümünü kontrol edin - kaynak uzaydan görünür olabilir!"
@@ -220,7 +221,7 @@
"added_by": "{{name}} tarafından eklendi",
"added_by_you": "Sizin tarafınızdan eklendi",
"date_added": "{{date}} tarihinde eklendi",
- "date_last_edited": "Son düzenleme {{date}}",
+ "date_last_updated": "Son güncelleme {{date}}",
"imported_from": "{{name}} kaynağından içe aktarıldı",
"season": {
"in_season": "{{start_month}} ile {{stop_month}} arasında mevsiminde",
diff --git a/public/locales/uk.json b/public/locales/uk.json
index f8ced0996..e1f999973 100644
--- a/public/locales/uk.json
+++ b/public/locales/uk.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Додати опис",
+ "add_season_end": "Додати кінець сезону",
"add_season_start": "Додати початок сезону",
- "add_season_stop": "Додати кінець сезону",
- "edit_description_eg_still_there": "Редагувати опис: 'все ще там'",
+ "confirm_still_exists": "Підтвердити, що все ще існує",
"over_x_years_ago": "Понад {{yearsAgo}} років тому",
"report_comment_placeholder_no_longer_exists": "Більше не існує",
- "report_no_longer_exists": "Повідомити: більше не існує"
+ "report_no_longer_exists": "Повідомити, що більше не існує",
+ "review_comment_placeholder_still_exists": "Все ще тут!"
},
"index": {
"editmarker_html": "Перемістіть до позиції джерела. Перевірте супутниковий вигляд - джерело може бути видно з космосу!"
@@ -220,7 +221,7 @@
"added_by": "Додано користувачем {{name}}",
"added_by_you": "Додано вами",
"date_added": "Додано {{date}}",
- "date_last_edited": "Востаннє редаговано {{date}}",
+ "date_last_updated": "Останнє оновлення {{date}}",
"imported_from": "Імпортовано з {{name}}",
"season": {
"in_season": "В сезоні з {{start_month}} по {{stop_month}}",
diff --git a/public/locales/vi.json b/public/locales/vi.json
index 7bf6457a2..9910f6d40 100644
--- a/public/locales/vi.json
+++ b/public/locales/vi.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "Thêm mô tả",
+ "add_season_end": "Thêm ngày kết thúc mùa",
"add_season_start": "Thêm mùa bắt đầu",
- "add_season_stop": "Thêm mùa kết thúc",
- "edit_description_eg_still_there": "Chỉnh sửa mô tả: 'vẫn còn đó'",
+ "confirm_still_exists": "Xác nhận vẫn tồn tại",
"over_x_years_ago": "Hơn {{yearsAgo}} năm trước",
"report_comment_placeholder_no_longer_exists": "Không còn tồn tại",
- "report_no_longer_exists": "Báo cáo: không còn tồn tại"
+ "report_no_longer_exists": "Báo cáo không còn tồn tại",
+ "review_comment_placeholder_still_exists": "Vẫn còn đó!"
},
"index": {
"editmarker_html": "Di chuyển đến vị trí của nguồn. Kiểm tra chế độ xem vệ tinh - nguồn có thể được nhìn thấy từ không gian!"
@@ -220,7 +221,7 @@
"added_by": "Được thêm bởi {{name}}",
"added_by_you": "Thêm bởi bạn",
"date_added": "Đã thêm {{date}}",
- "date_last_edited": "Chỉnh sửa lần cuối {{date}}",
+ "date_last_updated": "Cập nhật lần cuối {{date}}",
"imported_from": "Được nhập từ {{name}}",
"season": {
"in_season": "Trong mùa từ {{start_month}} đến {{stop_month}}",
diff --git a/public/locales/zh-hans.json b/public/locales/zh-hans.json
index 150c666d1..64b3cdddc 100644
--- a/public/locales/zh-hans.json
+++ b/public/locales/zh-hans.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "添加描述",
+ "add_season_end": "添加季节结束",
"add_season_start": "添加采摘期开始时间",
- "add_season_stop": "添加采摘期结束时间",
- "edit_description_eg_still_there": "编辑描述:'仍然存在'",
+ "confirm_still_exists": "确认仍然存在",
"over_x_years_ago": "{{yearsAgo}}年前",
"report_comment_placeholder_no_longer_exists": "不再存在",
- "report_no_longer_exists": "报告:已不存在"
+ "report_no_longer_exists": "报告不再存在",
+ "review_comment_placeholder_still_exists": "还在那里!"
},
"index": {
"editmarker_html": "拖动到确切位置。 建议切换到卫星视图——有时可以从空中直接看到果树!"
@@ -220,7 +221,7 @@
"added_by": "由 {{name}} 添加",
"added_by_you": "由你添加",
"date_added": "添加于 {{date}}",
- "date_last_edited": "最后编辑于 {{date}}",
+ "date_last_updated": "最后更新于 {{date}}",
"imported_from": "导入自 {{name}}",
"season": {
"in_season": "采摘期:{{start_month}} 至 {{stop_month}}",
diff --git a/public/locales/zh-hant.json b/public/locales/zh-hant.json
index 0189d5903..08e77dd8d 100644
--- a/public/locales/zh-hant.json
+++ b/public/locales/zh-hant.json
@@ -182,12 +182,13 @@
},
"hints": {
"add_description": "新增描述",
+ "add_season_end": "新增季節結束",
"add_season_start": "新增季節開始",
- "add_season_stop": "新增季節結束",
- "edit_description_eg_still_there": "編輯描述:「仍然存在」",
+ "confirm_still_exists": "確認仍然存在",
"over_x_years_ago": "超過{{yearsAgo}}年前",
- "report_comment_placeholder_no_longer_exists": "已不存在",
- "report_no_longer_exists": "回報:已不存在"
+ "report_comment_placeholder_no_longer_exists": "不再存在",
+ "report_no_longer_exists": "報告不再存在",
+ "review_comment_placeholder_still_exists": "還在那裡!"
},
"index": {
"editmarker_html": "移動到源的位置。 檢查衛星視圖 - 從太空中可以看到源!"
@@ -220,7 +221,7 @@
"added_by": "由{{name}}添加",
"added_by_you": "由您添加",
"date_added": "已於{{date}}添加",
- "date_last_edited": "最後編輯於{{date}}",
+ "date_last_updated": "最後更新於{{date}}",
"imported_from": "從{{name}}導入",
"season": {
"in_season": "從{{start_month}}到{{stop_month}}的季節",
diff --git a/scripts/less b/scripts/less
deleted file mode 100644
index e69de29bb..000000000
diff --git a/scripts/translation_manager.py b/scripts/translation_manager.py
index 799877483..d32d6709c 100755
--- a/scripts/translation_manager.py
+++ b/scripts/translation_manager.py
@@ -11,6 +11,10 @@
logger = logging.getLogger(__name__)
+SCRIPT_DIR = Path(__file__).parent
+DEFAULT_SOURCE_PATH = str(SCRIPT_DIR / "../src")
+DEFAULT_JSON_FOLDER_PATH = str(SCRIPT_DIR / "../public/locales")
+
class TranslationManager:
def __init__(self, source_path, json_folder_path):
@@ -222,8 +226,10 @@ def fill_up_translations(self):
def main():
parser = argparse.ArgumentParser(description="Manage translations")
- parser.add_argument("--source_path", help="Path to source file or directory to scan for translations")
- parser.add_argument("--json_folder_path", help="Path to the folder for JSON locale files")
+ parser.add_argument("--source_path", default=DEFAULT_SOURCE_PATH,
+ help="Path to source file or directory to scan for translations (default: ../src relative to script)")
+ parser.add_argument("--json_folder_path", default=DEFAULT_JSON_FOLDER_PATH,
+ help="Path to the folder for JSON locale files (default: ../public/locales relative to script)")
parser.add_argument("--list-in-source", action="store_true", help="List all translation keys in the component file")
parser.add_argument("--list-in-json", action="store_true", help="List all translation keys and values from JSON files")
parser.add_argument("--rename-key", nargs=2, metavar=('OLD_KEY', 'NEW_KEY'),
diff --git a/src/components/entry/EntryOverview.js b/src/components/entry/EntryOverview.js
index de2a73d4c..b7cbd5153 100644
--- a/src/components/entry/EntryOverview.js
+++ b/src/components/entry/EntryOverview.js
@@ -142,9 +142,9 @@ const SeasonalityInfo = ({ locationData }) => {
? formatMonth(locationData.season_stop, i18n.language)
: '?',
})}
-
-
+
+
)
}
@@ -204,42 +204,42 @@ const AuthorInfo = ({ locationData, user }) =>
)
-const LastEditedInfo = ({ locationData }) => {
+const LastEditedInfo = ({ locationData, lastUpdatedDate }) => {
const { t, i18n } = useTranslation()
const [expanded, setExpanded] = useState(false)
- const wasCreatedSameDay = isSameDay(
- locationData.created_at,
- locationData.updated_at,
- )
-
- const icon = wasCreatedSameDay ? :
-
- const dateTime = wasCreatedSameDay
- ? locationData.created_at
- : locationData.updated_at
+ const onToggle = () => setExpanded((prev) => !prev)
- const label = wasCreatedSameDay
- ? t('locations.overview.date_added', {
- date: formatISOString(locationData.created_at, i18n.language),
- })
- : t('locations.overview.date_last_edited', {
- date: formatISOString(locationData.updated_at, i18n.language),
- })
+ const hadNoUpdates = isSameDay(locationData.created_at, lastUpdatedDate)
return (
<>
- {icon}
+ {hadNoUpdates ? : }
- {label}
+
+ {hadNoUpdates
+ ? t('locations.overview.date_added', {
+ date: formatISOString(locationData.created_at, i18n.language),
+ })
+ : t('locations.overview.date_last_updated', {
+ date: formatISOString(lastUpdatedDate, i18n.language),
+ })}
+
setExpanded((prev) => !prev)}
+ onToggle={onToggle}
/>
- {expanded && }
+ {expanded && (
+
+ )}
>
)
}
@@ -253,6 +253,7 @@ const EntryOverview = () => {
locationId,
location: locationData,
reviews,
+ lastUpdatedDate,
} = useSelector((state) => state.location)
const isEmbed = useIsEmbed()
const { locationsWithoutPanorama } = useSelector((state) => state.misc)
@@ -327,7 +328,10 @@ const EntryOverview = () => {
locationData.user_id) && (
)}
-
+
diff --git a/src/components/entry/overview/Hints.js b/src/components/entry/overview/Hints.js
index 277a8044e..ccaaaeefe 100644
--- a/src/components/entry/overview/Hints.js
+++ b/src/components/entry/overview/Hints.js
@@ -119,23 +119,21 @@ export const AddSeasonStopHint = ({ locationData }) => {
})
}}
>
- {t('locations.hints.add_season_stop')}
+ {t('locations.hints.add_season_end')}
)
}
export const StaleLocationHintToggle = ({
- locationData,
+ lastUpdatedDate,
expanded,
onToggle,
}) => {
const { t } = useTranslation()
const { fullyOpenPaneDrawerIfMobile } = useLocationPane()
- const updatedAt = locationData.updated_at
- ? new Date(locationData.updated_at)
- : null
+ const updatedAt = lastUpdatedDate ? new Date(lastUpdatedDate) : null
if (!updatedAt || Date.now() - updatedAt.getTime() <= TEN_YEARS_MS) {
return null
@@ -161,40 +159,44 @@ export const StaleLocationHintToggle = ({
)
}
-export const StaleLocationHintActions = ({ locationData }) => {
+export const StaleLocationHintActions = ({ locationData, lastUpdatedDate }) => {
const { t } = useTranslation()
const history = useAppHistory()
const { fullyOpenPaneDrawerIfMobile } = useLocationPane()
- const updatedAt = locationData.updated_at
- ? new Date(locationData.updated_at)
- : null
+ const updatedAt = lastUpdatedDate ? new Date(lastUpdatedDate) : null
if (!updatedAt || Date.now() - updatedAt.getTime() <= TEN_YEARS_MS) {
return null
}
- const comment = t(
+
+ const reportComment = t(
'locations.hints.report_comment_placeholder_no_longer_exists',
)
+ const reviewComment = t(
+ 'locations.hints.review_comment_placeholder_still_exists',
+ )
+
return (
{
fullyOpenPaneDrawerIfMobile()
- history.push(`/locations/${locationData.id}/edit`, {
- focus: 'description',
+ history.push(`/locations/${locationData.id}/review`, {
+ defaultComment: reviewComment,
+ focus: 'review.comment',
})
}}
>
- {t('locations.hints.edit_description_eg_still_there')}
+ {t('locations.hints.confirm_still_exists')}
{
fullyOpenPaneDrawerIfMobile()
history.addParam('report', 'true', {
problem_code: 1,
- comment: comment,
+ comment: reportComment,
focus: 'comment',
})
}}
diff --git a/src/components/form/ReportModal.js b/src/components/form/ReportModal.js
index af98185b7..8cef8d34a 100644
--- a/src/components/form/ReportModal.js
+++ b/src/components/form/ReportModal.js
@@ -1,5 +1,3 @@
-import { useFormikContext } from 'formik'
-import { useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { toast } from 'react-toastify'
@@ -8,18 +6,7 @@ import * as Yup from 'yup'
import { addReport } from '../../utils/api'
import Modal from '../ui/Modal'
import { Input, Recaptcha, Select, Textarea } from './FormikWrappers'
-
-const SetInitialValue = ({ name, value }) => {
- //Set the value programmatically to the form submittable afterwards
- const { setFieldValue } = useFormikContext()
- useEffect(() => {
- if (value != null) {
- setFieldValue(name, value, true)
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [])
- return null
-}
+import SetInitialValue from './SetInitialValue'
const ReportModal = ({
locationId,
diff --git a/src/components/form/ReviewForm.js b/src/components/form/ReviewForm.js
index 4e4be347e..e02452cc1 100644
--- a/src/components/form/ReviewForm.js
+++ b/src/components/form/ReviewForm.js
@@ -1,6 +1,7 @@
import { Form, Formik } from 'formik'
import { useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
+import { useLocation } from 'react-router-dom'
import styled from 'styled-components/macro'
import { INITIAL_REVIEW_VALUES } from '../../constants/form'
@@ -22,6 +23,7 @@ import {
} from './FormikWrappers'
import { StyledForm } from './FormLayout'
import NotSignedInClickthrough from './NotSignedInClickthrough'
+import SetInitialValue from './SetInitialValue'
const validateReviewForm = ({ review, ...rest }, isLoggedIn) => {
const errors = {}
@@ -151,6 +153,8 @@ export const ReviewForm = ({ initialValues, editingId = null, innerRef }) => {
const { locationId } = useSelector((state) => state.location)
const reduxFormValues = useSelector((state) => state.review.form)
const isLoggedIn = useSelector((state) => !!state.auth.user)
+ const routeLocation = useLocation()
+ const defaultComment = routeLocation.state?.defaultComment ?? null
const mergedInitialValues = {
...INITIAL_REVIEW_VALUES,
@@ -213,6 +217,9 @@ export const ReviewForm = ({ initialValues, editingId = null, innerRef }) => {
return (