copy: simplify user-facing descriptions

This commit is contained in:
zv
2026-07-04 16:04:39 +02:00
parent f15ebd28dc
commit ab6b7b414f
3 changed files with 32 additions and 53 deletions

View File

@@ -32,7 +32,7 @@ export function ForecastSources({ sources }: { sources: ForecastSource[] }) {
> >
Open-Meteo <ExternalLink className="size-3" /> Open-Meteo <ExternalLink className="size-3" />
</a> </a>
. {t(hasImgw ? "forecast.sourceCombinedDescription" : "forecast.sourceFallbackDescription")} .
</p> </p>
); );
} }

View File

@@ -801,7 +801,9 @@ export function SettingsPage() {
</Button> </Button>
</div> </div>
<p className="mt-4 text-xs leading-5 text-muted">{t("settings.notifications.implementationNote")}</p> {t("settings.notifications.implementationNote") && (
<p className="mt-4 text-xs leading-5 text-muted">{t("settings.notifications.implementationNote")}</p>
)}
</div> </div>
</div> </div>
</Card> </Card>

View File

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