diff --git a/components/forecast/forecast-sources.tsx b/components/forecast/forecast-sources.tsx index e734f69..53eb553 100644 --- a/components/forecast/forecast-sources.tsx +++ b/components/forecast/forecast-sources.tsx @@ -32,7 +32,7 @@ export function ForecastSources({ sources }: { sources: ForecastSource[] }) { > Open-Meteo - . {t(hasImgw ? "forecast.sourceCombinedDescription" : "forecast.sourceFallbackDescription")} + .

); } diff --git a/components/settings/settings-page.tsx b/components/settings/settings-page.tsx index 64ff5cc..163c767 100644 --- a/components/settings/settings-page.tsx +++ b/components/settings/settings-page.tsx @@ -801,7 +801,9 @@ export function SettingsPage() { -

{t("settings.notifications.implementationNote")}

+ {t("settings.notifications.implementationNote") && ( +

{t("settings.notifications.implementationNote")}

+ )} diff --git a/lib/i18n.tsx b/lib/i18n.tsx index b524bdb..fa8e9c6 100644 --- a/lib/i18n.tsx +++ b/lib/i18n.tsx @@ -21,8 +21,7 @@ const translations = { "theme.dark": "Włącz ciemny motyw", "settings.section": "Preferencje", "settings.title": "Ustawienia", - "settings.description": - "Zarządzaj językiem, wyglądem i przygotowaniem powiadomień o ostrzeżeniach meteorologicznych IMGW.", + "settings.description": "Dostosuj wygląd, język, sekcje i powiadomienia.", "settings.language.title": "Język", "settings.language.description": "Zmieniaj język interfejsu. Nazwy stacji i treści IMGW pozostają bez automatycznego tłumaczenia.", @@ -68,16 +67,12 @@ const translations = { "Oficjalne ostrzeżenia IMGW są obecnie obsługiwane tylko dla Polski. Dla tej lokalizacji możesz używać briefów opartych o prognozę modelową Open-Meteo.", "settings.notifications.deviceTitle": "To urządzenie", "settings.notifications.enable": "Alerty IMGW", - "settings.notifications.enableDescription": - "Subskrypcja zostanie zapisana dla wybranego województwa i użyta przez serwerowy sprawdzacz ostrzeżeń.", - "settings.notifications.enableGlobalDescription": - "Subskrypcja zostanie zapisana dla wybranej lokalizacji i użyta do briefów opartych o prognozę modelową.", + "settings.notifications.enableDescription": "Otrzymuj alerty dla wybranego obszaru.", + "settings.notifications.enableGlobalDescription": "Otrzymuj briefy dla wybranej lokalizacji.", "settings.notifications.morningBrief": "Brief poranny o 7:00", - "settings.notifications.morningBriefDescription": - "Używa wybranej lokalizacji i prognozy modelowej, aby wysłać krótkie podsumowanie dnia na to urządzenie.", + "settings.notifications.morningBriefDescription": "Krótkie podsumowanie pogody na dziś.", "settings.notifications.tomorrowBrief": "Brief na jutro o 18:00", - "settings.notifications.tomorrowBriefDescription": - "Wysyła wieczorem krótką prognozę na kolejny dzień, w tym sygnały burz i opadów z modelu.", + "settings.notifications.tomorrowBriefDescription": "Wieczorna prognoza na kolejny dzień.", "settings.notifications.enableDevice": "Włącz na tym urządzeniu", "settings.notifications.disable": "Wyłącz na tym urządzeniu", "settings.notifications.enabledStatus": "Włączone", @@ -92,7 +87,7 @@ const translations = { "settings.notifications.testError": "Nie udało się wysłać powiadomienia testowego.", "settings.notifications.requestPermission": "Sprawdź zgodę", "settings.notifications.statusChecking": "Sprawdzam obsługę powiadomień w tej przeglądarce.", - "settings.notifications.statusUnconfigured": "Serwer nie ma jeszcze skonfigurowanych kluczy Web Push VAPID.", + "settings.notifications.statusUnconfigured": "Powiadomienia są niedostępne.", "settings.notifications.statusUnsupported": "Ta przeglądarka nie udostępnia Web Push dla tej aplikacji.", "settings.notifications.statusNeedsInstall": "Na iPhonie dodaj aplikację do ekranu początkowego przez Udostępnij → Dodaj do ekranu początkowego, a potem otwórz ją z ikony.", @@ -100,8 +95,7 @@ const translations = { "settings.notifications.statusGranted": "To urządzenie ma zgodę na powiadomienia.", "settings.notifications.statusReady": "Możesz poprosić system o zgodę na powiadomienia. Android i desktop działają bez instalowania PWA, jeśli przeglądarka obsługuje Web Push.", - "settings.notifications.implementationNote": - "Serwerowy sprawdzacz wysyła nowe ostrzeżenia meteo IMGW oraz briefy przez Web Push. Subskrypcje i historia wysyłek są przechowywane w SQLite.", + "settings.notifications.implementationNote": "", "pwa.install": "Zainstaluj", "common.noData": "Brak danych", "common.loading": "Ładowanie danych", @@ -110,8 +104,7 @@ const translations = { "error.description": "Sprawdź połączenie i spróbuj ponownie.", "dashboard.error": "Nie udało się pobrać listy stacji synoptycznych IMGW.", "brief.label": "Brief dnia", - "brief.description": - "Automatyczne podsumowanie dla lokalizacji: {location}. Bez zewnętrznego modelu AI, wyłącznie z prognozy i ostrzeżeń.", + "brief.description": "Podsumowanie dla lokalizacji: {location}.", "brief.tomorrowLabel": "Jutro", "brief.pushHint": "Krótkie wersje mogą być wysyłane jako powiadomienia o 7:00 i 18:00 po włączeniu ich w ustawieniach.", @@ -195,8 +188,7 @@ const translations = { "weather.temperatureDetail": "Temperatura powietrza", "forecast.label": "Prognoza modelowa", "forecast.title": "Najbliższe godziny i dni", - "forecast.description": - "Prognoza dla {location}. Bieżące warunki powyżej pochodzą z IMGW, a poniższe wartości są prognozą modelową preferującą IMGW.", + "forecast.description": "Prognoza dla lokalizacji: {location}.", "forecast.hourly": "Najbliższe 24 godziny", "forecast.daily": "Prognoza 7-dniowa", "forecast.today": "Dzisiaj", @@ -221,9 +213,8 @@ const translations = { "forecast.maxProbability": "Maks. szansa opadu", "forecast.pastHour": "Miniona godzina", "forecast.source": "Źródło prognozy:", - "forecast.sourceCombinedDescription": - "IMGW ALARO dostarcza dostępne godziny prognozy, a Open-Meteo uzupełnia prawdopodobieństwo opadu i dalszy horyzont do 7 dni.", - "forecast.sourceFallbackDescription": "Prognoza jest wyświetlana jako modelowa prognoza Open-Meteo.", + "forecast.sourceCombinedDescription": "IMGW ALARO i Open-Meteo.", + "forecast.sourceFallbackDescription": "Open-Meteo.", "forecast.error": "Nie udało się pobrać prognozy modelowej.", "forecast.emptyTitle": "Brak prognozy", "forecast.emptyDescription": "Źródła prognozy nie zwróciły teraz kompletnej prognozy dla tej lokalizacji.", @@ -255,8 +246,7 @@ const translations = { "Wizualizacja bieżącego odczytu. API synoptyczne IMGW nie udostępnia historii ani prognozy godzinowej.", "warnings.section": "Komunikaty IMGW", "warnings.title": "Ostrzeżenia", - "warnings.description": - "Aktualne ostrzeżenia meteorologiczne i hydrologiczne publikowane przez IMGW. Szczegóły obszaru i czasu obowiązywania pochodzą bezpośrednio z API.", + "warnings.description": "Aktualne ostrzeżenia meteorologiczne i hydrologiczne IMGW.", "warnings.myProvince": "Mój obszar", "warnings.myProvinceDescription": "Najpierw pokazujemy komunikaty IMGW dotyczące obszaru {province}, zgodnie z lokalizacją wybraną w pogodzie.", @@ -269,8 +259,7 @@ const translations = { "warnings.emptyTitle": "Brak aktywnych ostrzeżeń", "warnings.emptyDescription": "IMGW nie publikuje obecnie ostrzeżeń meteorologicznych ani hydrologicznych.", "warnings.globalUnavailableTitle": "Oficjalne ostrzeżenia tylko dla Polski", - "warnings.globalUnavailableDescription": - "Oficjalne ostrzeżenia pogodowe są obecnie obsługiwane tylko dla Polski przez IMGW. Dla tej lokalizacji możesz korzystać z prognozy modelowej Open-Meteo, ale nie traktujemy jej jako oficjalnego alertu.", + "warnings.globalUnavailableDescription": "Oficjalne ostrzeżenia są obecnie dostępne tylko dla Polski.", "warnings.drought": "Susza hydrologiczna", "warnings.levelUnknown": "Poziom nieokreślony", "warnings.level": "Stopień {level}", @@ -291,8 +280,7 @@ const translations = { "warnings.dashboard.viewAll": "Zobacz wszystkie", "hydro.section": "Monitoring wód IMGW", "hydro.title": "Hydro", - "hydro.description": - "Najnowsze dostępne pomiary poziomu wody, temperatury i przepływu. Każdy parametr może mieć własny czas aktualizacji.", + "hydro.description": "Najnowsze pomiary poziomu, temperatury i przepływu wody.", "hydro.error": "Nie udało się pobrać stacji hydrologicznych IMGW.", "hydro.searchLabel": "Szukaj stacji hydrologicznej", "hydro.searchPlaceholder": "Szukaj stacji, rzeki lub województwa…", @@ -324,8 +312,7 @@ const translations = { "theme.dark": "Enable dark theme", "settings.section": "Preferences", "settings.title": "Settings", - "settings.description": - "Manage language, appearance and preparation for IMGW meteorological warning notifications.", + "settings.description": "Customize appearance, language, sections and notifications.", "settings.language.title": "Language", "settings.language.description": "Change the interface language. Station names and IMGW content are not translated automatically.", @@ -370,16 +357,12 @@ const translations = { "Official IMGW warnings are currently supported only for Poland. For this location you can use briefs based on the Open-Meteo model forecast.", "settings.notifications.deviceTitle": "This device", "settings.notifications.enable": "IMGW alerts", - "settings.notifications.enableDescription": - "The subscription will be saved for the selected province and used by the server warning checker.", - "settings.notifications.enableGlobalDescription": - "The subscription will be saved for the selected location and used for model forecast briefs.", + "settings.notifications.enableDescription": "Receive alerts for the selected area.", + "settings.notifications.enableGlobalDescription": "Receive briefs for the selected location.", "settings.notifications.morningBrief": "Morning brief at 7:00", - "settings.notifications.morningBriefDescription": - "Uses the selected location and model forecast to send a short daily summary to this device.", + "settings.notifications.morningBriefDescription": "A short weather summary for today.", "settings.notifications.tomorrowBrief": "Tomorrow brief at 18:00", - "settings.notifications.tomorrowBriefDescription": - "Sends a short evening forecast for the next day, including storm and rain signals from the model.", + "settings.notifications.tomorrowBriefDescription": "An evening forecast for the next day.", "settings.notifications.enableDevice": "Enable on this device", "settings.notifications.disable": "Disable on this device", "settings.notifications.enabledStatus": "Enabled", @@ -394,7 +377,7 @@ const translations = { "settings.notifications.testError": "Unable to send the test notification.", "settings.notifications.requestPermission": "Check permission", "settings.notifications.statusChecking": "Checking notification support in this browser.", - "settings.notifications.statusUnconfigured": "The server does not have Web Push VAPID keys configured yet.", + "settings.notifications.statusUnconfigured": "Notifications are unavailable.", "settings.notifications.statusUnsupported": "This browser does not provide Web Push for this app.", "settings.notifications.statusNeedsInstall": "On iPhone, add the app to the Home Screen using Share → Add to Home Screen, then open it from the icon.", @@ -402,8 +385,7 @@ const translations = { "settings.notifications.statusGranted": "This device has notification permission.", "settings.notifications.statusReady": "You can ask the system for notification permission. Android and desktop work without installing the PWA when the browser supports Web Push.", - "settings.notifications.implementationNote": - "The server checker sends new IMGW meteorological warnings and briefs through Web Push. Subscriptions and delivery history are stored in SQLite.", + "settings.notifications.implementationNote": "", "pwa.install": "Install", "common.noData": "No data", "common.loading": "Loading data", @@ -412,7 +394,7 @@ const translations = { "error.description": "Check your connection and try again.", "dashboard.error": "Unable to load the IMGW synoptic station list.", "brief.label": "Daily brief", - "brief.description": "Automatic summary for: {location}. No external AI model, only forecast data and warnings.", + "brief.description": "Summary for: {location}.", "brief.tomorrowLabel": "Tomorrow", "brief.pushHint": "Short versions can be sent as 7:00 and 18:00 notifications after enabling them in settings.", "brief.error": "Unable to prepare the daily brief.", @@ -497,8 +479,7 @@ const translations = { "weather.temperatureDetail": "Air temperature", "forecast.label": "Model forecast", "forecast.title": "Upcoming hours and days", - "forecast.description": - "Forecast for {location}. The current conditions above come from IMGW. The values below are a model forecast preferring IMGW.", + "forecast.description": "Forecast for: {location}.", "forecast.hourly": "Next 24 hours", "forecast.daily": "7-day forecast", "forecast.today": "Today", @@ -523,9 +504,8 @@ const translations = { "forecast.maxProbability": "Max. rain chance", "forecast.pastHour": "Past hour", "forecast.source": "Forecast source:", - "forecast.sourceCombinedDescription": - "IMGW ALARO provides the available forecast hours. Open-Meteo supplements precipitation probability and extends the horizon to 7 days.", - "forecast.sourceFallbackDescription": "The forecast is shown as an Open-Meteo model forecast.", + "forecast.sourceCombinedDescription": "IMGW ALARO and Open-Meteo.", + "forecast.sourceFallbackDescription": "Open-Meteo.", "forecast.error": "Unable to load the model forecast.", "forecast.emptyTitle": "Forecast unavailable", "forecast.emptyDescription": "The forecast sources did not return a complete forecast for this location.", @@ -557,8 +537,7 @@ const translations = { "Visualisation of the current reading. The IMGW synoptic API does not provide historical data or an hourly forecast.", "warnings.section": "IMGW notices", "warnings.title": "Warnings", - "warnings.description": - "Current meteorological and hydrological warnings published by IMGW. Area and validity details come directly from the API.", + "warnings.description": "Current IMGW meteorological and hydrological warnings.", "warnings.myProvince": "My area", "warnings.myProvinceDescription": "IMGW notices for {province} are shown first, based on the location selected in weather.", @@ -570,8 +549,7 @@ const translations = { "warnings.emptyTitle": "No active warnings", "warnings.emptyDescription": "IMGW is not currently publishing any meteorological or hydrological warnings.", "warnings.globalUnavailableTitle": "Official warnings only for Poland", - "warnings.globalUnavailableDescription": - "Official weather warnings are currently supported only for Poland through IMGW. For this location you can use the Open-Meteo model forecast, but it is not treated as an official alert.", + "warnings.globalUnavailableDescription": "Official warnings are currently available only for Poland.", "warnings.drought": "Hydrological drought", "warnings.levelUnknown": "Level not specified", "warnings.level": "Level {level}", @@ -592,8 +570,7 @@ const translations = { "warnings.dashboard.viewAll": "View all", "hydro.section": "IMGW water monitoring", "hydro.title": "Hydro", - "hydro.description": - "Latest available water level, temperature and flow readings. Each parameter may have a different update time.", + "hydro.description": "Latest water level, temperature and flow readings.", "hydro.error": "Unable to load IMGW hydrological stations.", "hydro.searchLabel": "Search hydrological stations", "hydro.searchPlaceholder": "Search by station, river or province…",