diff --git a/app/build.gradle b/app/build.gradle index 61b893c58..8cf3cdccb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.example.weathermaster" minSdk 22 targetSdk 33 - versionCode 52 - versionName "1.6.1 (W)" + versionCode 53 + versionName "1.6.2 (W)" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json deleted file mode 100644 index a47cd5030..000000000 --- a/app/release/output-metadata.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": 3, - "artifactType": { - "type": "APK", - "kind": "Directory" - }, - "applicationId": "com.example.weathermaster", - "variantName": "release", - "elements": [ - { - "type": "SINGLE", - "filters": [], - "attributes": [], - "versionCode": 2, - "versionName": "1.3.5 (W)", - "outputFile": "app-release.apk" - } - ], - "elementType": "File" -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0a669ba6a..a4b31dc15 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,6 +72,12 @@ android:exported="true" android:theme="@style/ScreenLiveRadar" /> + new Date(time).getTime()); + const sunsetTimes = data.daily.sunset.map(time => new Date(time).getTime()); data.hourly.time.forEach((time, index) => { - const forecastTime = new Date(time); - let hours = forecastTime.getHours(); + const forecastTime = new Date(time).getTime(); + let hours = new Date(time).getHours(); const period = hours >= 12 ? "PM" : "AM"; hours = hours % 12 || 12; @@ -45,12 +45,18 @@ function HourlyWeather(data) { const PrecProb = data.hourly.precipitation_probability[index] + let dayIndex = -1; + for (let i = 0; i < sunriseTimes.length; i++) { + if (forecastTime >= sunriseTimes[i] && forecastTime < (sunriseTimes[i + 1] || Infinity)) { + dayIndex = i; + break; + } + } let icon; - - if (forecastTime >= sunriseTime && forecastTime <= sunsetTime) { - icon = GetWeatherIconDay(HourWeatherCode); + if (dayIndex !== -1 && forecastTime >= sunriseTimes[dayIndex] && forecastTime < sunsetTimes[dayIndex]) { + icon = GetWeatherIconDay(HourWeatherCode); // Day icon } else { - icon = GetWeatherIconNight(HourWeatherCode); + icon = GetWeatherIconNight(HourWeatherCode); // Night icon } const maxRain = 2; @@ -132,7 +138,8 @@ function HourlyWeather(data) { ` forecastItem.addEventListener('click', ()=>{ - ShowSnack(`${GetWeatherLabel(HourWeatherCode, 1)}`, 2000, 3, 'none', ' ', 'no-up') + ShowSnack(`${getWeatherLabelInLang(HourWeatherCode, 1, localStorage.getItem('AppLanguageCode'))}`, 2000, 3, 'none', ' ', 'no-up') + }); @@ -159,24 +166,24 @@ function DailyWeather(dailyForecast) { const warmingComments = [ - "Warming expected over the next few days.", - "Temperatures will rise soon, get ready for some heat!", - "Looks like it's going to get warmer this week.", - "Prepare for warmer weather ahead." + getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'Warming expected over the next few days.'), + getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'Temperatures will rise soon, get ready for some heat!'), + getTranslationByLang(localStorage.getItem('AppLanguageCode'), "Looks like it's going to get warmer this week."), + getTranslationByLang(localStorage.getItem('AppLanguageCode'), "Prepare for warmer weather ahead."), ]; const coolingComments = [ - "Cooling expected over the next few days.", - "Temperatures are dropping soon, stay warm!", - "It's going to get cooler in the coming days.", - "Expect a chilly breeze over the next days." + getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'Cooling expected over the next few days.'), + getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'Temperatures are dropping soon, stay warm!'), + getTranslationByLang(localStorage.getItem('AppLanguageCode'), "It's going to get cooler in the coming days."), + getTranslationByLang(localStorage.getItem('AppLanguageCode'), "Expect a chilly breeze over the next days."), ]; const stableComments = [ - "Stable temperatures expected in the next few days.", - "No big temperature changes ahead, steady weather.", - "Temperatures are holding steady for now.", - "Expect stable weather without much change." + getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'Stable temperatures expected in the next few days.'), + getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'No big temperature changes ahead, steady weather.'), + getTranslationByLang(localStorage.getItem('AppLanguageCode'), "Temperatures are holding steady for now."), + getTranslationByLang(localStorage.getItem('AppLanguageCode'), "Expect stable weather without much change."), ]; function getRandomComment(commentsArray) { @@ -219,7 +226,10 @@ function DailyWeather(dailyForecast) { const dateObj = new Date(time); const isToday = time === today; - const weekday = isToday ? 'Today' : dateObj.toLocaleDateString('en-US', { weekday: 'short' }); + const weekday = isToday ? 'today' : dateObj.toLocaleDateString('en-US', { weekday: 'short' }).toLowerCase(); + + const weekdayLang = getTranslationByLang(localStorage.getItem('AppLanguageCode'), weekday); + const rainPercentage = dailyForecast.precipitation_probability_max[index]; @@ -273,7 +283,7 @@ function DailyWeather(dailyForecast) { Weather Icon ${rainPercentage}%
-

${weekday}

+

${weekdayLang}

` @@ -282,7 +292,7 @@ function DailyWeather(dailyForecast) { const daylightMinutes = Math.floor((daylightDurationInSeconds % 3600) / 60); - document.getElementById('weatherComments').innerHTML = `hourglass_top ${daylightHours} hrs ${daylightMinutes} mins day length keyboard_arrow_down` + document.getElementById('weatherComments').innerHTML = `hourglass_top ${daylightHours} hrs ${daylightMinutes} mins ${getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'day_length')} keyboard_arrow_down` @@ -378,10 +388,10 @@ function CurrentWeather(data, sunrise, sunset) { document.getElementById('temp').innerHTML = CurrentTemperature + '°'; - document.getElementById('feels_like_now').innerHTML = 'Feels like ' + FeelsLikeTemp + '°'; + document.getElementById('feels_like_now').innerHTML = `${getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'feels_like')} ` + FeelsLikeTemp + '°'; document.getElementById('weather-icon').src = GetWeatherIcon(CurrentWeatherCode, isDay); document.getElementById('weather-icon').alt = CurrentWeatherCode - document.getElementById('description').innerHTML = GetWeatherLabel(CurrentWeatherCode, isDay) + document.getElementById('description').innerHTML = getWeatherLabelInLang(CurrentWeatherCode, isDay, localStorage.getItem('AppLanguageCode')); document.getElementById('wind-speed').innerHTML = CurrentWindSpeed document.getElementById('WindGust').innerHTML = CurrentWindGust document.getElementById('clouds').innerHTML = CurrentCloudCover + '%' @@ -389,7 +399,7 @@ function CurrentWeather(data, sunrise, sunset) { document.documentElement.setAttribute('iconcodetheme', GetWeatherTheme(CurrentWeatherCode, isDay)) sendThemeToAndroid(GetWeatherTheme(CurrentWeatherCode, 1)) - document.getElementById('temPDiscCurrentLocation').innerHTML = `${CurrentTemperature}° • ${GetWeatherLabel(CurrentWeatherCode, isDay)}` + document.getElementById('temPDiscCurrentLocation').innerHTML = `${CurrentTemperature}° • ${getWeatherLabelInLang(CurrentWeatherCode, isDay, localStorage.getItem('AppLanguageCode'))}` document.getElementById('currentSearchImg').src = `${GetWeatherIcon(CurrentWeatherCode, isDay)}`; @@ -418,33 +428,34 @@ function CurrentWeather(data, sunrise, sunset) { const windspeedType = document.getElementById('windtype'); if (data.wind_speed_10m < 1) { - windspeedType.innerHTML = "Calm"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'calm'); } else if (data.wind_speed_10m < 5) { - windspeedType.innerHTML = "Light air"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'light_air'); } else if (data.wind_speed_10m < 11) { - windspeedType.innerHTML = "Light breeze"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'light_breeze'); } else if (data.wind_speed_10m < 19) { - windspeedType.innerHTML = "Gentle breeze"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'gentle_breeze'); } else if (data.wind_speed_10m < 28) { - windspeedType.innerHTML = "Moderate breeze"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'moderate_breeze'); } else if (data.wind_speed_10m < 38) { - windspeedType.innerHTML = "Fresh breeze"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'fresh_breeze'); } else if (data.wind_speed_10m < 49) { - windspeedType.innerHTML = "Strong breeze"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'strong_breeze'); } else if (data.wind_speed_10m < 61) { - windspeedType.innerHTML = "High wind"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'high_wind'); } else if (data.wind_speed_10m < 74) { - windspeedType.innerHTML = "Gale"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'gale'); } else if (data.wind_speed_10m < 88) { - windspeedType.innerHTML = "Strong gale"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'strong_gale'); } else if (data.wind_speed_10m < 102) { - windspeedType.innerHTML = "Storm"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'storm'); } else if (data.wind_speed_10m < 117) { - windspeedType.innerHTML = "Violent storm"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'violent_storm'); } else { - windspeedType.innerHTML = "Hurricane"; + windspeedType.innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'hurricane'); } + if (data.pressure_msl < '980') { document.getElementById('pressure_icon_svg').innerHTML = WidgetsPressure.LowPressure } else if (data.pressure_msl > '980' && data.pressure_msl <= '1005') { @@ -546,7 +557,7 @@ setTimeout(()=>{ if (minutesAgo > 1) { document.getElementById('last_updated').innerHTML = `Updated ${minutesAgo} mins ago`; } else if (minutesAgo < 1) { - document.getElementById('last_updated').innerHTML = `Updated, just now`; + document.getElementById('last_updated').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'updated_just_now');; } else { document.getElementById('last_updated').innerHTML = `Updated ${minutesAgo} min ago`; } @@ -625,9 +636,9 @@ const percentageOfDaylight = Math.round(calculateDaylightPercentage(sunrise, sun - const recommendation = getClothingRecommendation(temperatureCLoths); + const recommendation = getClothingRecommendation(temperatureCLoths) - document.getElementById('cloth_recommended').textContent = recommendation + document.getElementById('cloth_recommended').textContent = getTranslationByLang(localStorage.getItem('AppLanguageCode'), recommendation) } @@ -680,8 +691,16 @@ function AirQuaility(data) { - document.getElementById('aqi-level').textContent = aqiText[aqiCategory].level; - document.getElementById('detail_air').textContent = aqiText[aqiCategory].message; + const aqiData = aqiText[aqiCategory]; + + const langCode = localStorage.getItem('AppLanguageCode'); + + const levelTranslation = getTranslationByLang(langCode, aqiData.level); + const messageTranslation = getTranslationByLang(langCode, aqiData.message); + + document.getElementById('aqi-level').textContent = levelTranslation; + document.getElementById('detail_air').textContent = messageTranslation; + const backgroundImage = { 1: 'air-pop-imgs/good.png', @@ -789,75 +808,75 @@ function UvIndex(latitude, longitude) { if (uvIndex >= 0 && uvIndex <= 1) { - document.getElementById('uv-index').innerHTML = 'Minimal risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'minimal_risk'); document.getElementById('uv-index').style = 'background-color: #43b710'; document.getElementById('uv_img').src = 'uv-images/uv-0.png'; - document.getElementById('detail_uv').innerHTML = Uv_0 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'uv_index_satisfactory') } else if (uvIndex > 1 && uvIndex <= 2) { - document.getElementById('uv-index').innerHTML = 'Low risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'low_risk'); document.getElementById('uv-index').style = 'background-color: #43b710'; document.getElementById('uv_img').src = 'uv-images/uv-1.png'; - document.getElementById('detail_uv').innerHTML = Uv_1 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'conditions_low_risk') } else if (uvIndex > 2 && uvIndex <= 3) { - document.getElementById('uv-index').innerHTML = 'Low risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'low_risk'); document.getElementById('uv-index').style = 'background-color: #43b710'; document.getElementById('uv_img').src = 'uv-images/uv-2.png'; - document.getElementById('detail_uv').innerHTML = Uv_2 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'low_exposure_level') } else if (uvIndex > 3 && uvIndex <= 4) { - document.getElementById('uv-index').innerHTML = 'Moderate risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'moderate_risk'); document.getElementById('uv-index').style = 'background-color: #eaaf10'; document.getElementById('uv_img').src = 'uv-images/uv-3.png'; - document.getElementById('detail_uv').innerHTML = Uv_3 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'moderate_risk_sun_exposure') } else if (uvIndex > 4 && uvIndex <= 5) { - document.getElementById('uv-index').innerHTML = 'Moderate risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'moderate_risk'); document.getElementById('uv-index').style = 'background-color: #eaaf10'; document.getElementById('uv_img').src = 'uv-images/uv-4.png'; - document.getElementById('detail_uv').innerHTML = Uv_4 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'moderate_risk_sun_exposure') } else if (uvIndex > 5 && uvIndex <= 6) { - document.getElementById('uv-index').innerHTML = 'Moderate risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'moderate_risk'); document.getElementById('uv-index').style = 'background-color: #eaaf10'; document.getElementById('uv_img').src = 'uv-images/uv-5.png'; - document.getElementById('detail_uv').innerHTML = Uv_5 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'moderate_risk_sun_exposure') } else if (uvIndex > 6 && uvIndex <= 7) { - document.getElementById('uv-index').innerHTML = 'High risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'high_risk'); document.getElementById('uv-index').style = 'background-color: #eb8a11'; document.getElementById('uv_img').src = 'uv-images/uv-6.png'; - document.getElementById('detail_uv').innerHTML = Uv_6 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'high_risk_sun_exposure') } else if (uvIndex > 7 && uvIndex <= 8) { - document.getElementById('uv-index').innerHTML = 'High risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'high_risk'); document.getElementById('uv-index').style = 'background-color: #eb8a11'; document.getElementById('uv_img').src = 'uv-images/uv-7.png'; - document.getElementById('detail_uv').innerHTML = Uv_7 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'high_risk_sun_exposure') } else if (uvIndex > 8 && uvIndex <= 9) { - document.getElementById('uv-index').innerHTML = 'Very high risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'very_high_risk'); document.getElementById('uv-index').style = 'background-color: #e83f0f'; document.getElementById('uv_img').src = 'uv-images/uv-8.png'; - document.getElementById('detail_uv').innerHTML = Uv_8 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'very_high_risk_sun_exposure') } else if (uvIndex > 9 && uvIndex <= 10) { - document.getElementById('uv-index').innerHTML = 'Very high risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'very_high_risk'); document.getElementById('uv-index').style = 'background-color: #e83f0f'; document.getElementById('uv_img').src = 'uv-images/uv-9.png'; - document.getElementById('detail_uv').innerHTML = Uv_9 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'very_high_risk_sun_exposure') } else if (uvIndex > 10 && uvIndex <= 11) { - document.getElementById('uv-index').innerHTML = 'Very high risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'very_high_risk'); document.getElementById('uv-index').style = 'background-color: #e83f0f'; document.getElementById('uv_img').src = 'uv-images/uv-10.png'; - document.getElementById('detail_uv').innerHTML = Uv_10 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'very_high_risk_sun_exposure') } else if (uvIndex > 11 && uvIndex <= 12) { - document.getElementById('uv-index').innerHTML = 'Extreme risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'extreme_risk'); document.getElementById('uv-index').style = 'background-color: #8e3acf'; document.getElementById('uv_img').src = 'uv-images/uv-11.png'; - document.getElementById('detail_uv').innerHTML = Uv_11 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'extreme_risk_sun_exposure') } else if (uvIndex > 12 && uvIndex <= 13) { - document.getElementById('uv-index').innerHTML = 'Extreme risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'extreme_risk'); document.getElementById('uv-index').style = 'background-color: #ec0c8b'; document.getElementById('uv_img').src = 'uv-images/uv-12.png'; - document.getElementById('detail_uv').innerHTML = Uv_12 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'extreme_risk_sun_exposure') } else if (uvIndex > 13) { - document.getElementById('uv-index').innerHTML = 'Extreme risk'; + document.getElementById('uv-index').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'extreme_risk'); document.getElementById('uv-index').style = 'background-color: #550ef9'; document.getElementById('uv_img').src = 'uv-images/uv-13.png'; - document.getElementById('detail_uv').innerHTML = Uv_13 + document.getElementById('detail_uv').innerHTML = getTranslationByLang(localStorage.getItem('AppLanguageCode'), 'extreme_risk_sun_exposure') } @@ -867,7 +886,7 @@ function UvIndex(latitude, longitude) { function MoreDetails(latSum, lonSum) { - fetch(`https://api.weatherapi.com/v1/forecast.json?key=KEYS&q=${latSum},${lonSum}`) + fetch(`https://api.weatherapi.com/v1/forecast.json?key=MAIN_KEYS&q=${latSum},${lonSum}`) .then(response => response.json()) .then(data => { @@ -978,7 +997,7 @@ function MoreDetails(latSum, lonSum) { } function astronomyData(latSum, lonSum) { - fetch(`https://api.weatherapi.com/v1/astronomy.json?key=KEYS&q=${latSum},${lonSum}`) + fetch(`https://api.weatherapi.com/v1/astronomy.json?key=MAIN_KEYS&q=${latSum},${lonSum}`) .then(response => response.json()) .then(data => { @@ -1043,7 +1062,7 @@ fetch(apiUrlAlerts) if (data.alerts) { console.log(data.alerts); const alertEvent = data.alerts[0].event; - document.getElementById('excessiveHeatText').innerHTML = 'Weather alerts' + 'Tap to see more...'; + document.querySelector('.weatherCommentsDiv').classList.add('alertOpened'); document.querySelector('.excessiveHeat').hidden = false; localStorage.setItem('AlertCache', JSON.stringify(data.alerts)); @@ -1070,4 +1089,10 @@ fetch(apiUrlAlerts) function clickForecastItem(index){ localStorage.setItem('ClickedForecastItem', index) -} \ No newline at end of file +} + + const AppLanguageCodeValue = localStorage.getItem('AppLanguageCode'); + if (AppLanguageCodeValue) { + applyTranslations(AppLanguageCodeValue); + + } \ No newline at end of file diff --git a/app/src/main/assets/index.html b/app/src/main/assets/index.html index 2d0ebcb75..8a66e2044 100644 --- a/app/src/main/assets/index.html +++ b/app/src/main/assets/index.html @@ -14,6 +14,8 @@ + + @@ -72,7 +74,7 @@
- Now + Now

Weather Icon @@ -111,7 +113,7 @@
info
-

Excessive heat

+

Weather alertsTap to see more...

@@ -139,18 +141,18 @@
-
+
air

-
+
wind_power

-
+
cloud

@@ -166,14 +168,14 @@
wb_twilight
-

Don't miss the sunrise! It will happen in 40 minutes or less.

+

Don't miss the sunrise! It will happen in 40 minutes or less.

@@ -203,7 +205,7 @@
-

Next 24-hr

+

Next 24-hr

Mar, 19

@@ -216,17 +218,17 @@
-

Hourly precipitation

+

Hourly precipitation

-

Today's amount

+

Today's amount

1.5 mm
-

Precipitation hours

+

Precipitation hours

1.5 mm
@@ -242,9 +244,9 @@
-

14-day Forecast

-

More chevron_right

+

14-day forecast

+

More chevron_right

@@ -253,7 +255,8 @@
-
radarLive radar
+
radar Live radar
@@ -267,7 +270,7 @@
-
wb_twilightSun
+
wb_twilightSun
-
humidity_highHumidity
+
humidity_highHumidity
@@ -350,7 +354,7 @@

-

- Dew point + Dew point
@@ -372,7 +376,8 @@
-
compressPressure
+
compressPressure

29.96

inHG
@@ -381,7 +386,8 @@
-
visibilityVisibility
+
visibilityVisibility
-
exploreDirection
+
exploreDirection

--

---
@@ -440,7 +446,7 @@
-

Air Quality

+

Air Quality

Error

@@ -505,7 +511,7 @@
-

UV Index

+

UV Index

@@ -532,8 +538,8 @@
@@ -576,7 +582,7 @@
-

location_onCurrent Location

+

location_onCurrent location

@@ -588,7 +594,7 @@
@@ -666,6 +672,21 @@ @@ -737,7 +760,6 @@ document.getElementById('clearCityInput').addEventListener('click', () =>{ - @@ -748,6 +770,7 @@ document.getElementById('clearCityInput').addEventListener('click', () =>{ + diff --git a/app/src/main/assets/langs/langs.js b/app/src/main/assets/langs/langs.js new file mode 100644 index 000000000..5ab231057 --- /dev/null +++ b/app/src/main/assets/langs/langs.js @@ -0,0 +1,2684 @@ +const translations = { + "feels_like": [ + "Feels like", + "Sensación térmica", + "", + "Fühlt sich an wie", + "Sembra che", + "", + "", + "Чувствуется как", + "", + "", + "Se simte ca", + "Pocitová teplota", + "", + "" + ], + "precipitation": [ + "Precipitation", + "Precipitación", + "", + "Niederschlag", + "Precipitazioni", + "", + "", + "Осадки", + "", + "", + "Precipitații", + "Zrážky", + "", + "" + ], + "humidity": [ + "Humidity", + "Humedad", + "", + "Luftfeuchtigkeit", + "Umidità", + "", + "", + "Влажность", + "", + "", + "Umiditate", + "Vlhkosť", + "", + "" + ], + "wind": [ + "Wind", + "Viento", + "", + "Wind", + "Vento", + "", + "", + "Ветер", + "", + "", + "Vânt", + "Vietor", + "", + "" + ], + "uv": [ + "UV", + "UV", + "", + "UV", + "UV", + "", + "", + "УФ", + "", + "", + "UV", + "UV", + "", + "" + ], + "settings": [ + "Settings", + "Ajustes", + "", + "Einstellungen", + "Impostazioni", + "", + "", + "Настройки", + "", + "", + "Setări", + "Nastavenia", + "", + "" + ], + "about": [ + "About", + "Acerca de", + "", + "Über", + "Circa", + "", + "", + "О сайте", + "", + "", + "Despre", + "O aplikácii", + "", + "" + ], + "today": [ + "Today", + "Hoy", + "", + "Heute", + "Oggi", + "", + "", + "Сегодня", + "", + "", + "Azi", + "Dnes", + "", + "" + ], + "tomorrow": [ + "Tomorrow", + "Mañana", + "", + "Morgen", + "Domani", + "", + "", + "Завтра", + "", + "", + "Mâine", + "Zajtra", + "", + "" + ], + "language": [ + "Language", + "Idioma", + "", + "Sprache", + "Lingua", + "", + "", + "Язык", + "", + "", + "Limbă", + "Jazyk", + "", + "" + ], + "weather_master": [ + "WeatherMaster", + "WeatherMaster", + "", + "WeatherMaster", + "WeatherMaster", + "", + "", + "WeatherMaster", + "", + "", + "WeatherMaster", + "WeatherMaster", + "", + "" + ], + "temperature": [ + "Temperature", + "Temperatura", + "", + "Temperatur", + "Temperatura", + "", + "", + "Температура", + "", + "", + "Temperatură", + "Teplota", + "", + "" + ], + "now": [ + "Now", + "Ahora", + "", + "Jetzt", + "Ora", + "", + "", + "Сейчас", + "", + "", + "Acum", + "Teraz", + "", + "" + ], + "clear_sky": [ + "Clear sky", + "Cielo despejado", + "", + "Klarer Himmel", + "Cielo sereno", + "", + "", + "Чистое небо", + "", + "", + "Cer senin", + "Jasno", + "", + "" + ], + "mostly_clear": [ + "Mostly clear", + "Mayormente despejado", + "", + "Meistens klar", + "Per lo più sereno", + "", + "", + "В основном ясно", + "", + "", + "În mare parte senin", + "Takmer jasno", + "", + "" + ], + "partly_cloudy": [ + "Partly cloudy", + "Parcialmente nublado", + "", + "Teilweise bewölkt", + "Parzialmente nuvoloso", + "", + "", + "Частично облачно", + "", + "", + "Parțial înnorat", + "Polooblačno", + "", + "" + ], + "overcast": [ + "Overcast", + "Nublado", + "", + "Bedeckt", + "Nuvoloso", + "", + "", + "Пасмурная погода", + "", + "", + "Înnorat", + "Zamračené", + "", + "" + ], + "fog": [ + "Fog", + "Niebla", + "", + "Nebel", + "Nebbia", + "", + "", + "Туман", + "", + "", + "Ceață", + "Hmla", + "", + "" + ], + "drizzle": [ + "Drizzle", + "Llovizna", + "", + "Nieselregen", + "Pioggerella", + "", + "", + "Морось", + "", + "", + "Burniță", + "Mrholenie", + "", + "" + ], + "freezing_drizzle": [ + "Freezing Drizzle", + "Llovizna helada", + "", + "Eisiger Nieselregen", + "Pioggia gelata", + "", + "", + "Холодная морось", + "", + "", + "Chiciură fină", + "Mrznúce mrholenie", + "", + "" + ], + "moderate_rain": [ + "Moderate rain", + "Lluvia moderada", + "", + "Mäßiger Regen", + "Pioggia moderata", + "", + "", + "Умеренный дождь", + "", + "", + "Ploaie moderată", + "Mierny dážď", + "", + "" + ], + "heavy_intensity_rain": [ + "Heavy intensity rain", + "Lluvia intensa", + "", + "Starker Regen", + "Pioggia di forte intensità", + "", + "", + "Дождь сильной интенсивности", + "", + "", + "Ploaie torențială", + "Silný dážď", + "", + "" + ], + "freezing_rain": [ + "Freezing Rain", + "Lluvia helada", + "", + "Gefrierregen", + "Pioggia gelata", + "", + "", + "Ледяной дождь", + "", + "", + "Chiciură", + "Mrznúci dážď", + "", + "" + ], + "slight_snow": [ + "Slight snow", + "Nieve ligera", + "", + "Leichter Schneefall", + "Neve leggera", + "", + "", + "Небольшой снег", + "", + "", + "Ninsoare ușoară", + "Jemné sneženie", + "", + "" + ], + "moderate_snow": [ + "Moderate snow", + "Nieve moderada", + "", + "Mäßiger Schneefall", + "Neve moderata", + "", + "", + "Умеренный снег", + "", + "", + "Ninsoare moderată", + "Mierne sneženie", + "", + "" + ], + "heavy_intensity_snow": [ + "Heavy intensity snow", + "Nieve intensa", + "", + "Starker Schneefall", + "Neve di forte intensità", + "", + "", + "Сильный снег", + "", + "", + "Ninsoare puternică", + "Silné sneženie", + "", + "" + ], + "snow_grains": [ + "Snow grains", + "Copos de nieve", + "", + "Schneekörner", + "Granelli di neve", + "", + "", + "Град", + "", + "", + "Ninsoare fină", + "Silné sneženie", + "", + "" + ], + "rain_showers": [ + "Rain showers", + "Chubascos", + "", + "Regenschauer", + "Piogge a catinelle", + "", + "", + "Ливневые дожди", + "", + "", + "Averse de ploaie", + "Prehánky", + "", + "" + ], + "heavy_rain_showers": [ + "Heavy rain showers", + "Lluvias fuertes", + "", + "Starke Regenschauer", + "Forti rovesci di pioggia", + "", + "", + "Сильные ливневые дожди", + "", + "", + "Avererse de ploaie torențiale", + "Silné prehánky", + "", + "" + ], + "slight_snow_showers": [ + "Slight snow showers", + "Ligeras nevadas", + "", + "Leichte Schneeschauer", + "Leggeri rovesci di neve", + "", + "", + "Небольшие осадки в виде снега", + "", + "", + "Averse ușoare de zăpadă", + "Mierne snehové prehánky", + "", + "" + ], + "heavy_snow_showers": [ + "Heavy snow showers", + "Fuertes nevadas", + "", + "Starke Schneeschauer", + "Forti rovesci di neve", + "", + "", + "Сильная метель со снегом", + "", + "", + "Averse abundente de zăpadă", + "Silné snehové prehánky", + "", + "" + ], + "thunderstorm": [ + "Thunderstorm", + "Tormenta eléctrica", + "", + "Gewitter", + "Temporale", + "", + "", + "Гроза", + "", + "", + "Furtună cu fulgere", + "Búrka", + "", + "" + ], + "strong_thunderstorm": [ + "Strong thunderstorm", + "Tormenta eléctrica fuerte", + "", + "Starkes Gewitter", + "Forte temporale", + "", + "", + "Сильная гроза", + "", + "", + "Furtună puternică", + "Silná búrka", + "", + "" + ], + "save": [ + "Save", + "Guardar", + "", + "Speichern", + "Risparmiare", + "", + "", + "Сохранить", + "", + "", + "Salvează", + "Uložiť", + "", + "" + ], + "saved_locations": [ + "Saved locations", + "Ubicaciones guardadas", + "", + "Gespeicherte Orte", + "Luoghi salvati", + "", + "", + "Сохраненные местоположения", + "", + "", + "Locații Salvate", + "Uložené miesta", + "", + "" + ], + "search": [ + "Search", + "Buscar", + "", + "Suche", + "Ricerca", + "", + "", + "Поиск", + "", + "", + "Caută", + "Hľadať", + "", + "" + ], + "good": [ + "Good", + "Bien", + "", + "Gut", + "Buono", + "", + "", + "Хорошо", + "", + "", + "Bun", + "Dobrý", + "", + "" + ], + "fair": [ + "Fair", + "Regular", + "", + "angemessen", + "Fiera", + "", + "", + "Прекрасно", + "", + "", + "Corect", + "Dostačujúci", + "", + "" + ], + "moderate": [ + "Moderate", + "Moderado", + "", + "Mäßig", + "Moderato", + "", + "", + "Умеренный", + "", + "", + "Moderat", + "Mierny", + "", + "" + ], + "poor": [ + "Poor", + "Pobre", + "", + "Schlecht", + "Povero", + "", + "", + "Плохо", + "", + "", + "Sărac", + "Zlý", + "", + "" + ], + "very_poor": [ + "Very poor", + "Muy pobre", + "", + "Sehr schlecht", + "Molto scarso", + "", + "", + "Очень плохо", + "", + "", + "Foarte sărac", + "Veľmi zlý", + "", + "" + ], + "pressure": [ + "Pressure", + "Presión", + "", + "Druck", + "Pressione", + "", + "", + "Давление", + "", + "", + "Presiune", + "Tlak", + "", + "" + ], + "day": [ + "Day", + "Día", + "", + "Tag", + "Giorno", + "", + "", + "День", + "", + "", + "Zi", + "Deň", + "", + "" + ], + "days": [ + "Days", + "Días", + "", + "Tage", + "Giorni", + "", + "", + "Дни", + "", + "", + "Zile", + "Dni", + "", + "" + ], + "mon": [ + "Mon", + "Lun", + "", + "Mon", + "Lun", + "", + "", + "Пн", + "", + "", + "Lun", + "Pon", + "", + "" + ], + "tue": [ + "Tue", + "Mar", + "", + "Die", + "Mar", + "", + "", + "Вт", + "", + "", + "Mar", + "Uto", + "", + "" + ], + "wed": [ + "Wed", + "Mie", + "", + "Mit", + "Mer", + "", + "", + "Ср", + "", + "", + "Mie", + "Str", + "", + "" + ], + "thu": [ + "Thu", + "Jue", + "", + "Don", + "Gio", + "", + "", + "Чт", + "", + "", + "Joi", + "Štv", + "", + "" + ], + "fri": [ + "Fri", + "Vie", + "", + "Fre", + "Ven", + "", + "", + "Пт", + "", + "", + "Vin", + "Pia", + "", + "" + ], + "sat": [ + "Sat", + "Sab", + "", + "Sam", + "Sat", + "", + "", + "Сб", + "", + "", + "Sâm", + "Sob", + "", + "" + ], + "sun": [ + "Sun", + "Dom", + "", + "Son", + "Sole", + "", + "", + "Вс", + "", + "", + "Dum", + "Ned", + "", + "" + ], + "error": [ + "Error", + "Error", + "", + "Fehler", + "Errore", + "", + "", + "Ошибка", + "", + "", + "Eroare", + "Chyba", + "", + "" + ], + "uv_index": [ + "UV index", + "Índice UV", + "", + "UV Index", + "Indice UV", + "", + "", + "УФ-индекс", + "", + "", + "Indice UV", + "UV index", + "", + "" + ], + "new_app_version_available": [ + "New App Version is available!", + "Nueva versión disponible!", + "", + "Neue App Version ist vefügbar!", + "È disponibile la nuova versione dell'app!", + "", + "", + "Новая версия приложения доступна!", + "", + "", + "Versiune nouă a aplicației disponibilă!", + "K dispozícii je nová verzia aplikácie!", + "", + "" + ], + "update": [ + "Update", + "Actualización", + "", + "Aktualisiere", + "Aggiornamento", + "", + "", + "Обновление", + "", + "", + "Actualizare", + "Aktualizovať", + "", + "" + ], + "air_quality": [ + "Air Quality", + "Calidad del aire", + "", + "Luft Qualität", + "Qualità dell'aria", + "", + "", + "Качество воздуха", + "", + "", + "Calitatea aerului", + "Kvalita ovzdušia", + "", + "" + ], + "dew_point": [ + "Dew point", + "Punto de rocío", + "", + "Taupunkt", + "Punto di rugiada", + "", + "", + "Точка росы", + "", + "", + "Punct de rouă", + "Rosný bod", + "", + "" + ], + "sunset": [ + "Sunset", + "Atardecer", + "", + "Sonnenuntergang", + "Tramonto", + "", + "", + "Закат", + "", + "", + "Răsărit", + "Západ slnka", + "", + "" + ], + "sunrise": [ + "Sunrise", + "Amanecer", + "", + "Sonnenaufgang", + "Alba", + "", + "", + "Восход солнца", + "", + "", + "Apus", + "Východ slnka", + "", + "" + ], + "moonrise": [ + "Moonrise", + "Salida de la luna", + "", + "Mondaufgang", + "Sorgere della luna", + "", + "", + "Восход луны", + "", + "", + "Răsăritul lunii", + "Východ mesiaca", + "", + "" + ], + "moonset": [ + "Moonset", + "Puesta de luna", + "", + "Monduntergang", + "Tramonto della luna", + "", + "", + "Закат луны", + "", + "", + "Apusul lunii", + "Západ mesiaca", + "", + "" + ], + "amount": [ + "Amount", + "Cantidad", + "", + "Menge", + "Importo", + "", + "", + "Количество", + "", + "", + "Cantitate", + "Množstvo", + "", + "" + ], + "precipitation_chances": [ + "Precipitation chances", + "Probabilidad de precipitaciones", + "", + "Niederschlagswahrscheinlichkeit", + "Possibilità di precipitazioni", + "", + "", + "Вероятность осадков", + "", + "", + "Sanșe de precipitație", + "Pravdepodobnosť zrážok", + "", + "" + ], + "precipitation_amount": [ + "Precipitation amount", + "Cantidad de precipitación", + "", + "Niederschlagsmenge", + "Quantità di precipitazioni", + "", + "", + "Количество осадков", + "", + "", + "Cantitate de precipitații", + "Množstvo zrážok", + "", + "" + ], + "wind_gust": [ + "Wind gust", + "Ráfaga de viento", + "", + "Windböe", + "Raffica di vento", + "", + "", + "Порыв ветра", + "", + "", + "Rafală de vânt", + "Náraz vetra", + "", + "" + ], + "wind_speed": [ + "Wind speed", + "Velocidad del viento", + "", + "Windgeschwindigkeit", + "Velocità del vento", + "", + "", + "Скорость ветра", + "", + "", + "Viteza vântului", + "Rýchlosť vetra", + "", + "" + ], + "live_radar": [ + "Live radar", + "Radar en directo", + "", + "Live Radar", + "Radar in tempo reale", + "", + "", + "Живой радар", + "", + "", + "Radar în timp real", + "Živý radar", + "", + "" + ], + "visibility": [ + "Visibility", + "Visibilidad", + "", + "Sichtbarkeit", + "Visibilità", + "", + "", + "Видимость", + "", + "", + "Vizibilitate", + "Viditeľnosť", + "", + "" + ], + "minimal_risk": [ + "Minimal risk", + "Riesgo mínimo", + "", + "Geringes Risiko", + "Rischio minimo", + "", + "", + "Минимальный риск", + "", + "", + "Risc Minim", + "Minimálne riziko", + "", + "" + ], + "low_risk": [ + "Low risk", + "Riesgo bajo", + "", + "Niedriges Risiko", + "Basso rischio", + "", + "", + "Низкий риск", + "", + "", + "Risc Scăzut", + "Nízke riziko", + "", + "" + ], + "moderate_risk": [ + "Moderate risk", + "Riesgo moderado", + "", + "Mäßiges Risiko", + "Rischio moderato", + "", + "", + "Умеренный риск", + "", + "", + "Risc Moderat", + "Mierne riziko", + "", + "" + ], + "high_risk": [ + "High risk", + "Riesgo alto", + "", + "Hohes Risiko", + "Alto rischio", + "", + "", + "Высокий риск", + "", + "", + "Risc Ridicat", + "Vysoké riziko", + "", + "" + ], + "very_high_risk": [ + "Very high risk", + "Riesgo muy alto", + "", + "Sehr hohes Risiko", + "Rischio molto elevato", + "", + "", + "Очень высокий риск", + "", + "", + "Risc foarte ridicat", + "Veľmi vysoké riziko", + "", + "" + ], + "extreme_risk": [ + "Extreme risk", + "Riesgo extremo", + "", + "Extrem hohes Risiko", + "Rischio estremo", + "", + "", + "Экстремальный риск", + "", + "", + "Risc Extrem", + "Extrémne riziko", + "", + "" + ], + "uv_index_satisfactory": [ + "A UV index is satisfactory, indicating that there is little or no risk of harm from ultraviolet radiation.", + "El índice UV es satisfactorio, lo que indica que hay poco o ningún riesgo de daño por radiación ultravioleta.", + "", + "Der UV-Index ist zufriedenstellend, d. h. es besteht kein oder nur ein geringes Risiko einer Schädigung durch ultraviolette Strahlung.", + "L'indice UV è soddisfacente e indica che il rischio di danni da radiazioni ultraviolette è minimo o nullo.", + "", + "", + "Ультрафиолетовый индекс - удовлетворительный, что говорит о незначительном или нулевом риске вреда от ультрафиолетового излучения.", + "", + "", + "Un indice UV este satisfăcător, indicând că există un risc redus sau inexistent de vătămare din cauza radiațiilor ultraviolete.", + "UV index je uspokojivý, čo naznačuje, že existuje malé alebo žiadne riziko poškodenia ultrafialovým žiarením.", + "", + "" + ], + "conditions_low_risk": [ + "Conditions are generally low-risk, indicating that exposure to ultraviolet radiation poses a minimal threat.", + "Las condiciones suelen ser de bajo riesgo, lo que indica que la exposición a la radiación ultravioleta supone una amenaza mínima.", + "", + "Die Bedingungen sind im Allgemeinen risikoarm, was bedeutet, dass die Aussetzung gegenüber ultravioletter Strahlung eine minimale Gefahr darstellt.", + "Le condizioni sono generalmente a basso rischio, il che indica che l'esposizione ai raggi ultravioletti rappresenta una minaccia minima.", + "", + "", + "Как правило, эти заболевания относятся к категории низкого риска, что говорит о том, что воздействие ультрафиолетового излучения представляет минимальную угрозу.", + "", + "", + "Condițiile sunt în general cu risc scăzut, ceea ce indică faptul că expunerea la radiațiile ultraviolete reprezintă o amenințare minimă.", + "Podmienky sú vo všeobecnosti nízkorizikové, čo znamená, že vystavenie ultrafialovému žiareniu predstavuje minimálnu hrozbu.", + "", + "" + ], + "low_exposure_level": [ + "Low exposure level with minimal risk of harm from UV radiation, suitable for most people.", + "Bajo nivel de exposición con un riesgo mínimo de daños por radiación UV, adecuado para la mayoría de las personas.", + "", + "Niedriges Expositionsniveau mit minimalem Risiko einer Schädigung durch UV-Strahlung, für die meisten Menschen geeignet.", + "Livello di esposizione basso con rischio minimo di danni da radiazioni UV, adatto alla maggior parte delle persone.", + "", + "", + "Низкий уровень облучения с минимальным риском вреда от УФ-излучения, подходит для большинства людей.", + "", + "", + "Nivel scăzut de expunere cu risc minim de vătămare din cauza radiațiilor UV, potrivit pentru majoritatea persoanelor.", + "Nízka úroveň vystavenia s minimálnym rizikom poškodenia UV žiarením, vhodné pre väčšinu ľudí.", + "", + "" + ], + "moderate_risk_sun_exposure": [ + "Moderate risk of harm from unprotected sun exposure, protective measures recommended.", + "Riesgo moderado de daños por exposición al sol sin protección, se recomiendan medidas de protección.", + "", + "Mäßiges Risiko von Schäden durch ungeschützte Sonneneinstrahlung, Schutzmaßnahmen empfohlen.", + "Rischio moderato di danni da esposizione solare non protetta, si raccomandano misure di protezione.", + "", + "", + "Умеренный риск вреда от незащищенного воздействия солнца, рекомендуются защитные меры.", + "", + "", + "Risc moderat de vătămare din cauza expunerii neprotejate la soare, se recomandă măsuri de protecție.", + "Mierne riziko poškodenia z nechráneného vystavenia slnku, odporúčajú sa ochranné opatrenia.", + "", + "" + ], + "high_risk_sun_exposure": [ + "High risk of harm from unprotected sun exposure, protective measures required.", + "Alto riesgo de daños por exposición al sol sin protección, se requieren medidas de protección.", + "", + "Hohes Risiko von Schäden durch ungeschützte Sonneneinstrahlung, Schutzmaßnahmen erforderlich.", + "Alto rischio di danni da esposizione solare non protetta, sono necessarie misure di protezione.", + "", + "", + "Высокий риск вреда от незащищенного воздействия солнца, требуются защитные меры.", + "", + "", + "Risc ridicat de vătămare din cauza expunerii neprotejate la soare, sunt necesare măsuri de protecție.", + "Vysoké riziko poškodenia z nechráneného vystavenia sa slnku, potrebné ochranné opatrenia.", + "", + "" + ], + "very_high_risk_sun_exposure": [ + "Very high risk of harm from unprotected sun exposure, extra precautions required.", + "Riesgo muy elevado de daños por exposición al sol sin protección, se requieren precauciones adicionales.", + "", + "Sehr hohes Risiko von Schäden durch ungeschützte Sonneneinstrahlung, zusätzliche Vorsichtsmaßnahmen erforderlich.", + "Rischio molto elevato di danni dovuti all'esposizione al sole non protetta, sono necessarie ulteriori precauzioni.", + "", + "", + "Очень высокий риск вреда от незащищенного воздействия солнца, требуются дополнительные меры предосторожности.", + "", + "", + "Risc foarte ridicat de vătămare din cauza expunerii neprotejate la soare, sunt necesare măsuri de precauție suplimentare.", + "Veľmi vysoké riziko poškodenia v dôsledku nechráneného vystavenia sa slnečnému žiareniu, sú potrebné mimoriadne bezpečnostné opatrenia.", + "", + "" + ], + "extreme_risk_sun_exposure": [ + "Extreme risk of harm from unprotected sun exposure, full protection necessary.", + "Riesgo extremo de daños por exposición al sol sin protección, es necesaria una protección total.", + "", + "Extremes Risiko von Schäden durch ungeschützte Sonneneinstrahlung, vollständiger Schutz erforderlich.", + "Rischio estremo di danni da esposizione solare non protetta, è necessaria una protezione totale.", + "", + "", + "Крайне высок риск вреда от незащищенного пребывания на солнце, необходима полная защита.", + "", + "", + "Risc extrem de mare de vătămare în urma expunerii neprotejate la soare, protecție completă necesară.", + "Extrémne riziko poškodenia z nechráneného vystavenia sa slnku, potrebná úplná ochrana.", + "", + "" + ], + "air_quality_satisfactory": [ + "Air quality is considered satisfactory, and air pollution poses little or no risk.", + "La calidad del aire se considera satisfactoria y la contaminación atmosférica plantea poco o ningún riesgo.", + "", + "Die Luftqualität wird als zufriedenstellend angesehen, und die Luftverschmutzung stellt nur ein geringes oder gar kein Risiko dar.", + "La qualità dell'aria è considerata soddisfacente e l'inquinamento atmosferico presenta rischi minimi o nulli.", + "", + "", + "Качество воздуха считается удовлетворительным, а загрязнение воздуха не представляет практически никакого риска.", + "", + "", + "Calitatea aerului este considerată satisfăcătoare, iar poluarea aerului reprezintă un risc redus sau inexistent.", + "Kvalita ovzdušia sa považuje za uspokojivú a znečistenie ovzdušia predstavuje malé alebo žiadne riziko.", + "", + "" + ], + "air_quality_acceptable": [ + "Air quality is acceptable; however, for some pollutants there may be a moderate health concern for a very small number of people who are unusually sensitive to air pollution.", + "La calidad del aire es aceptable; sin embargo, para algunos contaminantes puede haber un problema de salud moderado para un número muy pequeño de personas que son inusualmente sensibles a la contaminación atmosférica.", + "", + "Die Luftqualität ist akzeptabel; allerdings können einige Schadstoffe bei einer sehr kleinen Zahl von Menschen, die ungewöhnlich empfindlich auf Luftverschmutzung reagieren, ein mäßiges Gesundheitsrisiko darstellen.", + "La qualità dell'aria è accettabile; tuttavia, per alcuni inquinanti può esserci un moderato problema di salute per un numero molto ristretto di persone insolitamente sensibili all'inquinamento atmosferico.", + "", + "", + "Качество воздуха является приемлемым, однако некоторые загрязнители могут вызывать умеренное беспокойство за здоровье очень небольшого числа людей, необычайно чувствительных к загрязнению воздуха.", + "", + "", + "Calitatea aerului este acceptabilă; cu toate acestea, pentru unii poluanți poate exista o preocupare moderată privind sănătatea pentru un număr foarte mic de persoane care sunt neobișnuit de sensibile la poluarea aerului.", + "Kvalita vzduchu je prijateľná; pri niektorých znečisťujúcich látkach však môže existovať mierny zdravotný problém u veľmi malého počtu ľudí, ktorí sú nezvyčajne citliví na znečistenie ovzdušia.", + "", + "" + ], + "sensitive_groups_health_effects": [ + "Member of sensitive groups may experience health effects. The general public is not likely to be affected.", + "Los miembros de grupos sensibles pueden experimentar efectos sobre la salud. No es probable que afecte al público en general.", + "", + "Bei Mitgliedern empfindlicher Gruppen können gesundheitliche Auswirkungen auftreten. Die allgemeine Öffentlichkeit wird wahrscheinlich nicht betroffen sein.", + "I membri di gruppi sensibili possono subire effetti sulla salute. È improbabile che il pubblico in generale subisca effetti.", + "", + "", + "Представители чувствительных групп могут испытать воздействие на здоровье. На широкую общественность воздействие маловероятно.", + "", + "", + "Membrii grupurilor sensibile pot avea efecte asupra sănătății. Populația generală nu este susceptibilă de a fi afectată.", + "Členovia citlivých skupín môžu pociťovať zdravotné účinky. Širokej verejnosti sa to pravdepodobne nedotkne.", + "", + "" + ], + "health_effects_public": [ + "Everyone may begin to experience health effects; member of sensitive groups may experience more serious health effects.", + "Todo el mundo puede empezar a experimentar efectos sobre la salud; los miembros de grupos sensibles pueden experimentar efectos más graves sobre la salud.", + "", + "Bei allen Menschen können erste gesundheitliche Auswirkungen auftreten; bei Angehörigen empfindlicher Gruppen können schwerwiegendere gesundheitliche Auswirkungen auftreten.", + "Tutti possono iniziare a subire effetti sulla salute; i membri di gruppi sensibili possono subire effetti più gravi sulla salute.", + "", + "", + "Каждый человек может начать испытывать последствия для здоровья; представители чувствительных групп могут испытывать более серьезные последствия для здоровья.", + "", + "", + "Toată lumea poate începe să aibă efecte asupra sănătății; membrii grupurilor sensibile pot avea efecte mai grave asupra sănătății.", + "Každý môže začať pociťovať účinky na zdravie; člen citlivých skupín môže pociťovať vážnejšie zdravotné účinky.", + "", + "" + ], + "emergency_conditions": [ + "Health warnings of emergency conditions. The entire population is more likely to be affected.", + "Alertas sanitarias de condiciones de emergencia. Es más probable que toda la población se vea afectada.", + "", + "Gesundheitswarnungen vor Notlagen. Die Wahrscheinlichkeit, dass die gesamte Bevölkerung betroffen ist, ist größer.", + "Avvisi sanitari di condizioni di emergenza. L'intera popolazione ha maggiori probabilità di essere colpita.", + "", + "", + "Предупреждения о чрезвычайных ситуациях. С большей вероятностью пострадает все население.", + "", + "", + "Avertizări de sănătate privind condițiile de urgență. Este mai probabil ca întreaga populație să fie afectată.", + "Zdravotné varovania pred núdzovými podmienkami. Je pravdepodobnejšie, že bude postihnutá celá populácia.", + "", + "" + ], + "support": [ + "Support", + "Soporte", + "", + "Unterstützung", + "Supporto", + "", + "", + "Поддержка", + "", + "", + "Asistență", + "Podpora", + "", + "" + ], + "weather_notifications": [ + "Weather notifications", + "Notificaciones meteorológicas", + "", + "Wetter Benachrichtigungen", + "Notifiche meteo", + "", + "", + "Уведомления о погоде", + "", + "", + "Notificări meteorologice", + "Notifikácie o počasí", + "", + "" + ], + "home_location": [ + "Home location", + "Ubicación de inicio", + "", + "Heimatort", + "Posizione di casa", + "", + "", + "Расположение дома", + "", + "", + "Locația de domiciliu", + "Domovská lokalita", + "", + "" + ], + "save_locations_menu": [ + "You need to save locations to show in the menu", + "Es necesario guardar las ubicaciones para mostrarlas en el menú", + "", + "Sie müssen Orte speichern, die im Menü angezeigt werden sollen", + "È necessario salvare le posizioni da visualizzare nel menu", + "", + "", + "Вам нужно сохранить местоположения, чтобы они отображались в меню", + "", + "", + "Trebuie să salvați locațiile pentru a le afișa în meniu", + "Ak chcete zobraziť miesta v ponuke, musíte ich uložiť", + "", + "" + ], + "temperature_unit": [ + "Temperature Unit", + "Unidad de temperatura", + "", + "Temperatur Einheit", + "Unità di temperatura", + "", + "", + "Единица измерения температуры", + "", + "", + "Unitatea de temperatură", + "Jednotka teploty", + "", + "" + ], + "wind_unit": [ + "Wind Unit", + "Unidad de viento", + "", + "Wind Einheit", + "Unità vento", + "", + "", + "Единица измерения ветра", + "", + "", + "Unitatea de vânt", + "Jednotka vetra", + "", + "" + ], + "visibility_unit": [ + "Visibility Unit", + "Unidad de visibilidad", + "", + "Sichtbarkeit Einheit", + "Unità di visibilità", + "", + "", + "Единица измерения видимости", + "", + "", + "Unitatea de vizibilitate", + "Jednotka viditeľnosti", + "", + "" + ], + "precipitation_unit": [ + "Precipitation Unit", + "Unidad de Precipitación", + "", + "Niederschlag Einheit", + "Unità di precipitazione", + "", + "", + "Единица измерения осадков", + "", + "", + "Unitatea de precipitații", + "Jednotka zrážok", + "", + "" + ], + "pressure_unit": [ + "Pressure Unit", + "Unidad de presión", + "", + "Druck Einheit", + "Unità di pressione", + "", + "", + "Единица измерения давления", + "", + "", + "Unitatea de presiune", + "Jednotka tlaku", + "", + "" + ], + "app_language": [ + "App language", + "Idioma", + "", + "App Sprache", + "Lingua dell'app", + "", + "", + "Язык приложения", + "", + "", + "Limba aplicației", + "Jazyk aplikácie", + "", + "" + ], + "additional": [ + "Additional", + "Adicional", + "", + "Zusätzlich", + "Ulteriori", + "", + "", + "Дополнительно", + "", + "", + "Suplimentare", + "Ostatné", + "", + "" + ], + "about_weathermaster": [ + "About WeatherMaster", + "Acerca de WeatherMaster", + "", + "Über WheatherMaster", + "Informazioni su WeatherMaster", + "", + "", + "О WeatherMaster", + "", + "", + "Despre WeatherMaster", + "O aplikácii WeatherMaster", + "", + "" + ], + "data_provided_by": [ + "Data provided by", + "Datos proporcionados por", + "", + "Daten bereitgestellt von", + "Dati forniti da", + "", + "", + "Данные предоставлены", + "", + "", + "Date furnizate de", + "Údaje poskytlo", + "", + "" + ], + "map": [ + "Map", + "Mapa", + "", + "Karte", + "Mappa", + "", + "", + "Карта", + "", + "", + "Hartă", + "Mapa", + "", + "" + ], + "third_party_licenses": [ + "Third party licenses", + "Licencias de terceros", + "", + "Lizenzen von Dritten", + "Licenze di terze parti", + "", + "", + "Лицензии третьих сторон", + "", + "", + "Licențe terță parte", + "Licencie tretích strán", + "", + "" + ], + "privacy_policy": [ + "Privacy & Policy", + "Política de privacidad", + "", + "Datenschutz & Politik", + "Privacy e politica", + "", + "", + "Конфиденциальность и политика", + "", + "", + "Politică și Confidențialitate", + "Ochrana osobných údajov a zásady", + "", + "" + ], + "terms_conditions": [ + "Terms & Conditions", + "Términos y condiciones", + "", + "Bedingungen & Konditionen", + "Termini e condizioni", + "", + "", + "Условия и положения", + "", + "", + "Termeni și condiții", + "Zmluvné podmienky", + "", + "" + ], + "latest_version": [ + "Latest version", + "Última versión", + "", + "Neueste Version", + "Ultima versione", + "", + "", + "Последняя версия", + "", + "", + "Ultima Versiune", + "Najnovšia verzia", + "", + "" + ], + "app_version": [ + "App version", + "Versión de la aplicación", + "", + "App Version", + "Versione dell'app", + "", + "", + "Версия приложения", + "", + "", + "Versiunea Aplicației", + "Verzia aplikácie", + "", + "" + ], + "view_source_code": [ + "View source code", + "Ver código fuente", + "", + "Quellcode anzeigen", + "Visualizza il codice sorgente", + "", + "", + "Посмотреть исходный код", + "", + "", + "Vedeți codul sursă", + "Zobraziť zdrojový kód", + "", + "" + ], + "forecast": [ + "Forecast", + "Pronóstico", + "", + "Vorhersage", + "Previsioni", + "", + "", + "Прогноз", + "", + "", + "Prognoză", + "Predpoveď", + "", + "" + ], + "more": [ + "More", + "Mas", + "", + "Mehr", + "Di più", + "", + "", + "Подробнее", + "", + "", + "Mai mult", + "Viac", + "", + "" + ], + "todays_amount": [ + "Today's amount", + "Cantidad de hoy", + "", + "Heutige Menge", + "Importo odierno", + "", + "", + "Сегодняшнее количество", + "", + "", + "Cantitatea de azi", + "Dnešné množstvo", + "", + "" + ], + "precipitation_hours": [ + "Precipitation hours", + "Horas de precipitación", + "", + "Niederschlagsstunden", + "Ore di precipitazione", + "", + "", + "Часы выпадения осадков", + "", + "", + "Ore de precipitații", + "Doba zrážok", + "", + "" + ], + "next": [ + "Next", + "Siguiente", + "", + "Nächste", + "Avanti", + "", + "", + "Следующий", + "", + "", + "Următorul", + "Ďalej", + "", + "" + ], + "cloudiness": [ + "Cloudiness", + "Nubosidad", + "", + "Bewölkung", + "Nuvolosità", + "", + "", + "Облачность", + "", + "", + "Nebulozitate", + "Oblačnosť", + "", + "" + ], + "weather_alerts": [ + "Weather alerts", + "Alertas meteorológicas", + "", + "Wetter Warnungen", + "Allerte meteo", + "", + "", + "Предупреждения о погоде", + "", + "", + "Alerte meteorologice", + "Upozornenia na počasie", + "", + "" + ], + "tap_to_see_more": [ + "Tap to see more...", + "Ver más...", + "", + "Tippen Sie, um mehr zu sehen...", + "Toccare per vedere di più...", + "", + "", + "Нажмите, чтобы увидеть больше...", + "", + "", + "Vedeți detalii...", + "Klepnutím zobrazíte viac...", + "", + "" + ], + "weather": [ + "Weather", + "Clima", + "", + "Wetter", + "Tempo atmosferico", + "", + "", + "Погода", + "", + "", + "Vreme", + "Počasie", + "", + "" + ], + "learn_about_the_app": [ + "Learn about the app", + "Conozca más sobre la aplicación", + "", + "Mehr über die App erfahren", + "Scopri di più sull'app", + "", + "", + "Узнать о приложении", + "", + "", + "Aflați despre aplicație", + "Získajte informácie o aplikácii", + "", + "" + ], + "translate_this_app": [ + "Translate this app", + "Traducir esta aplicación", + "", + "Übersetzen Sie diese App", + "Traduci questa app", + "", + "", + "Перевести это приложение", + "", + "", + "Traduceți această aplicație", + "Preložte túto aplikáciu", + "", + "" + ], + "join_POEditor_project_to_help": [ + "Join POEditor project to help", + "Únase al proyecto POEditor para ayudar", + "", + "Werden Sie Teil des POEditor-Projekts und helfen Sie mit", + "Unisciti al progetto POEditor per aiutare", + "", + "", + "Присоединяйтесь к проекту POEditor, чтобы помочь", + "", + "", + "Alăturați-vă proiectului POEditor pentru a ajuta", + "Pripojte sa k projektu POEditor a pomôžte", + "", + "" + ], + "notification_bar": [ + "Notification bar", + "Barra de notificaciones", + "", + "Benachrichtigungsleiste", + "Barra delle notifiche", + "", + "", + "Панель уведомлений", + "", + "", + "Bara de notificare", + "Notifikačná lišta", + "", + "" + ], + "show_weather_information_in_the_notification_bar": [ + "Show weather information in the notification bar", + "Mostrar información meteorológica en la barra de notificaciones", + "", + "Wetterinformationen in der Benachrichtigungsleiste anzeigen", + "Mostra le informazioni meteo nella barra delle notifiche", + "", + "", + "Показать информацию о погоде на панели уведомлений", + "", + "", + "Afișați informații despre vreme în bara de notificări", + "Zobraziť informácie o počasí na paneli upozornení", + "", + "" + ], + "updated_just_now": [ + "Updated, just now", + "Actualizado, ahora mismo", + "", + "Aktualisiert, gerade eben", + "Aggiornato, proprio ora", + "", + "", + "Обновлено только что", + "", + "", + "Actualizat, tocmai acum", + "Aktualizované, práve teraz", + "", + "" + ], + "day_length": [ + "day length", + "Duración del día", + "", + "Tageslänge", + "lunghezza del giorno", + "", + "", + "продолжительность дня", + "", + "", + "lungimea zilei", + "dĺžka dňa", + "", + "" + ], + "dont_miss_sunrise": [ + "Don't miss the sunrise! It will happen in 40 minutes or less.", + "¡No te pierdas el amanecer! Será en 40 minutos o menos.", + "", + "Verpassen Sie nicht den Sonnenaufgang! Er wird in 40 Minuten oder weniger da sein.", + "Non perdetevi l'alba! Accadrà tra 40 minuti o meno.", + "", + "", + "Не пропустите восход солнца! Он произойдет через 40 минут или меньше.", + "", + "", + "Nu rata răsăritul! Se va întâmpla în 40 de minute sau mai puțin.", + "Nenechajte si ujsť východ slnka! Stane sa to za 40 minút alebo menej.", + "", + "" + ], + "dont_miss_sunset": [ + "Don't miss the sunset! It will happen in 40 minutes or less.", + "¡No te pierdas la puesta de sol! Ocurrirá en 40 minutos o menos.", + "", + "Verpassen Sie nicht den Sonnenuntergang! Er findet in 40 Minuten oder weniger statt.", + "Non perdetevi il tramonto! Accadrà tra 40 minuti o meno.", + "", + "", + "Не пропустите закат! Он произойдет через 40 минут или меньше.", + "", + "", + "Nu rata apusul! Se va întâmpla în 40 de minute sau mai puțin.", + "Nenechajte si ujsť západ slnka! Stane sa to za 40 minút alebo menej.", + "", + "" + ], + "hourly_precipitation": [ + "Hourly precipitation", + "Precipitación por hora", + "", + "Stündlicher Niederschlag", + "Precipitazioni orarie", + "", + "", + "Почасовые осадки", + "", + "", + "Precipitații orare", + "Hodinové zrážky", + "", + "" + ], + "direction": [ + "Direction", + "Dirección", + "", + "Richtung", + "Direzione", + "", + "", + "Направление", + "", + "", + "Direcţie", + "Smer", + "", + "" + ], + "calm": [ + "Calm", + "Calma", + "", + "Ruhig", + "Calma", + "", + "", + "Спокойствие", + "", + "", + "Calm", + "Pokojne", + "", + "" + ], + "light_air": [ + "Light air", + "Aire ligero", + "", + "Leichte Luft", + "Aria leggera", + "", + "", + "Легкий воздух", + "", + "", + "Aer ușor", + "Ľahký vzduch", + "", + "" + ], + "light_breeze": [ + "Light breeze", + "Brisa ligera", + "", + "Leichte Brise", + "brezza leggera", + "", + "", + "Легкий ветерок", + "", + "", + "Adiere ușoară", + "Ľahký vánok", + "", + "" + ], + "gentle_breeze": [ + "Gentle breeze", + "Brisa suave", + "", + "Sanfte Brise", + "Brezza leggera", + "", + "", + "Легкий ветерок", + "", + "", + "Adiere blândă", + "Jemný vánok", + "", + "" + ], + "moderate_breeze": [ + "Moderate breeze", + "Brisa moderada", + "", + "Mäßige Brise", + "Brezza moderata", + "", + "", + "Умеренный ветер", + "", + "", + "Adiere moderată", + "Mierny vánok", + "", + "" + ], + "fresh_breeze": [ + "Fresh breeze", + "Brisa fresca", + "", + "Frische Brise", + "Brezza fresca", + "", + "", + "Свежий ветерок", + "", + "", + "Adiere proaspătă", + "Svieži vánok", + "", + "" + ], + "strong_breeze": [ + "Strong breeze", + "Fuerte brisa", + "", + "Starke Brise", + "Brezza forte", + "", + "", + "Сильный ветер", + "", + "", + "Adiere puternică", + "Silný vánok", + "", + "" + ], + "high_wind": [ + "High wind", + "Viento fuerte", + "", + "Starker Wind", + "Vento forte", + "", + "", + "Сильный ветер", + "", + "", + "Vânt puternic", + "Silný vietor", + "", + "" + ], + "gale": [ + "Gale", + "Vendaval", + "", + "Sturm", + "Burrasca", + "", + "", + "Гейл", + "", + "", + "Vânt puternic", + "Gale", + "", + "" + ], + "strong_gale": [ + "Strong gale", + "Fuerte vendaval", + "", + "Starker Sturm", + "Forte burrasca", + "", + "", + "Сильный штормовой ветер", + "", + "", + "Furtună puternică", + "Silná víchrica", + "", + "" + ], + "storm": [ + "Storm", + "Tormenta", + "", + "Sturm", + "Tempesta", + "", + "", + "Шторм", + "", + "", + "Furtună", + "búrka", + "", + "" + ], + "violent_storm": [ + "Violent storm", + "Tormenta violenta", + "", + "Heftiger Sturm", + "Tempesta violenta", + "", + "", + "Сильный шторм", + "", + "", + "Furtună violentă", + "Prudká búrka", + "", + "" + ], + "hurricane": [ + "Hurricane", + "Huracán", + "", + "Hurrikan", + "Uragano", + "", + "", + "Ураган", + "", + "", + "Uragan", + "Hurikán", + "", + "" + ], + "Warming expected over the next few days.": [ + "Warming expected over the next few days.", + "Se espera calentamiento durante los próximos días.", + "", + "In den nächsten Tagen wird mit Erwärmung gerechnet.", + "Nei prossimi giorni è previsto un riscaldamento.", + "", + "", + "В ближайшие дни ожидается потепление.", + "", + "", + "Se așteaptă încălzire în următoarele zile.", + "V najbližších dňoch sa očakáva oteplenie.", + "", + "" + ], + "Temperatures will rise soon, get ready for some heat!": [ + "Temperatures will rise soon, get ready for some heat!", + "Las temperaturas subirán pronto, ¡prepárate para el calor!", + "", + "Die Temperaturen werden bald steigen, machen Sie sich auf Hitze gefasst!", + "Le temperature saliranno presto, preparatevi al caldo!", + "", + "", + "Температура скоро повысится, приготовьтесь к жаре!", + "", + "", + "Temperaturile vor crește în curând, pregătiți-vă pentru puțină căldură!", + "Teploty čoskoro stúpnu, pripravte sa na teplo!", + "", + "" + ], + "Looks like it's going to get warmer this week.": [ + "Looks like it's going to get warmer this week.", + "Parece que hará más calor esta semana.", + "", + "Es scheint, als würde es diese Woche wärmer werden.", + "Sembra che questa settimana farà più caldo.", + "", + "", + "Похоже, на этой неделе станет теплее.", + "", + "", + "Se pare că va deveni mai cald săptămâna asta.", + "Zdá sa, že tento týždeň sa oteplí.", + "", + "" + ], + "Prepare for warmer weather ahead.": [ + "Prepare for warmer weather ahead.", + "Prepárese para el clima más cálido que se avecina.", + "", + "Bereiten Sie sich auf das bevorstehende wärmere Wetter vor.", + "Preparatevi al clima più caldo che ci aspetta.", + "", + "", + "Готовьтесь к более теплой погоде.", + "", + "", + "Pregătiți-vă pentru vremea mai caldă.", + "Pripravte sa na teplejšie počasie.", + "", + "" + ], + "Cooling expected over the next few days.": [ + "Cooling expected over the next few days.", + "Se espera enfriamiento durante los próximos días.", + "", + "In den nächsten Tagen wird mit einer Abkühlung gerechnet.", + "Nei prossimi giorni è previsto un raffreddamento.", + "", + "", + "В ближайшие дни ожидается похолодание.", + "", + "", + "Se așteaptă răcire în următoarele zile.", + "V najbližších dňoch sa očakáva ochladenie.", + "", + "" + ], + "Temperatures are dropping soon, stay warm!": [ + "Temperatures are dropping soon, stay warm!", + "Las temperaturas bajarán pronto, ¡mantente abrigado!", + "", + "Die Temperaturen fallen bald, bleiben Sie warm!", + "Le temperature scenderanno presto, restate al caldo!", + "", + "", + "Температура скоро понизится, оставайтесь в тепле!", + "", + "", + "Temperaturile scad in curand, stai la cald!", + "Teploty čoskoro klesnú, zostaňte v teple!", + "", + "" + ], + "It's going to get cooler in the coming days.": [ + "It's going to get cooler in the coming days.", + "En los próximos días hará más frío.", + "", + "In den nächsten Tagen wird es kühler.", + "Nei prossimi giorni farà più fresco.", + "", + "", + "В ближайшие дни станет прохладнее.", + "", + "", + "O să se răcească în zilele următoare.", + "V najbližších dňoch sa ochladí.", + "", + "" + ], + "Expect a chilly breeze over the next days.": [ + "Expect a chilly breeze over the next days.", + "Se espera una brisa fría durante los próximos días.", + "", + "In den nächsten Tagen ist mit einer kühlen Brise zu rechnen.", + "Nei prossimi giorni è prevista una brezza fredda.", + "", + "", + "В ближайшие дни ожидается прохладный ветер.", + "", + "", + "Așteptați-vă la o adiere rece în zilele următoare.", + "Počas nasledujúcich dní očakávajte chladný vánok.", + "", + "" + ], + "Stable temperatures expected in the next few days.": [ + "Stable temperatures expected in the next few days.", + "Se esperan temperaturas estables en los próximos días.", + "", + "In den nächsten Tagen werden stabile Temperaturen erwartet.", + "Nei prossimi giorni sono previste temperature stabili.", + "", + "", + "В ближайшие дни ожидается стабильная температура.", + "", + "", + "Temperaturi stabile așteptate în următoarele zile.", + "V najbližších dňoch sa očakávajú stabilné teploty.", + "", + "" + ], + "No big temperature changes ahead, steady weather.": [ + "No big temperature changes ahead, steady weather.", + "No se esperan grandes cambios de temperatura y el tiempo será estable.", + "", + "Keine großen Temperaturschwankungen voraus, stabiles Wetter.", + "Non sono previsti grandi sbalzi di temperatura, tempo stabile.", + "", + "", + "Никаких существенных изменений температуры не предвидится, погода стабильная.", + "", + "", + "Nu există schimbări mari de temperatură în viitor, vreme constantă.", + "Žiadne veľké zmeny teplôt dopredu, stabilné počasie.", + "", + "" + ], + "Temperatures are holding steady for now.": [ + "Temperatures are holding steady for now.", + "Las temperaturas se mantienen estables por ahora.", + "", + "Die Temperaturen bleiben vorerst stabil.", + "Per ora le temperature sono stabili.", + "", + "", + "На данный момент температура держится стабильной.", + "", + "", + "Temperaturile se mențin deocamdată constant.", + "Teploty sa zatiaľ držia na stabilnej úrovni.", + "", + "" + ], + "Expect stable weather without much change.": [ + "Expect stable weather without much change.", + "Se espera un clima estable sin muchos cambios.", + "", + "Erwarten Sie stabiles Wetter ohne große Veränderungen.", + "Ci si aspetta un meteo stabile, senza grandi cambiamenti.", + "", + "", + "Ожидается стабильная погода без существенных изменений.", + "", + "", + "Așteptați-vă la o vreme stabilă, fără prea multe schimbări.", + "Očakávajte stabilné počasie bez veľkých zmien.", + "", + "" + ], + "❄️ Freezing temperatures! Wear a heavy coat, gloves, a hat, and a scarf to stay warm.": [ + "❄️ Freezing temperatures! Wear a heavy coat, gloves, a hat, and a scarf to stay warm.", + "❄️ ¡Temperaturas gélidas! Use un abrigo grueso, guantes, gorro y bufanda para mantenerse abrigado.", + "", + "❄️ Gefriertemperaturen! Tragen Sie einen dicken Mantel, Handschuhe, eine Mütze und einen Schal, um warm zu bleiben.", + "❄️ Temperature gelide! Indossa un cappotto pesante, guanti, un cappello e una sciarpa per stare al caldo.", + "", + "", + "❄️ Мороз! Наденьте теплое пальто, перчатки, шапку и шарф, чтобы согреться.", + "", + "", + "❄️ Temperaturi de îngheț! Purtați o haină grea, mănuși, o pălărie și o eșarfă pentru a vă menține cald.", + "❄️ Teploty pod bodom mrazu! Noste ťažký kabát, rukavice, čiapku a šál, aby ste zostali v teple.", + "", + "" + ], + "🧥 Very cold! Wear a thick coat, a hat, and gloves to keep warm.": [ + "🧥 Very cold! Wear a thick coat, a hat, and gloves to keep warm.", + "🧥 ¡Mucho frío! Lleva un abrigo grueso, gorro y guantes para abrigarte.", + "", + "🧥 Sehr kalt! Tragen Sie einen dicken Mantel, eine Mütze und Handschuhe, um sich warm zu halten.", + "🧥 Fa molto freddo! Indossa un cappotto spesso, un cappello e dei guanti per stare al caldo.", + "", + "", + "🧥 Очень холодно! Наденьте толстое пальто, шапку и перчатки, чтобы согреться.", + "", + "", + "🧥 Foarte frig! Purtați o haină groasă, o pălărie și mănuși pentru a vă menține cald.", + "🧥 Veľmi chladno! Noste hrubý kabát, čiapku a rukavice, aby ste sa udržali v teple.", + "", + "" + ], + "🧣 Cold weather. A coat and a sweater will keep you comfortable.": [ + "🧣 Cold weather. A coat and a sweater will keep you comfortable.", + "🧣 Hace frío. Un abrigo y un suéter te mantendrán cómoda.", + "", + "🧣 Kaltes Wetter. Ein Mantel und ein Pullover sorgen für Komfort.", + "🧣 Clima freddo. Un cappotto e un maglione ti terranno a tuo agio.", + "", + "", + "🧣 Холодная погода. Пальто и свитер обеспечат вам комфорт.", + "", + "", + "🧣 Vreme rece. O haină și un pulover vă vor menține confortabil.", + "🧣 Chladné počasie. Kabát a sveter vám zabezpečia pohodlie.", + "", + "" + ], + "🧥 Cool temperatures. Wear a light jacket and long sleeves.": [ + "🧥 Cool temperatures. Wear a light jacket and long sleeves.", + "🧥 Temperaturas frescas. Llevar chaqueta ligera y mangas largas.", + "", + "🧥 Kühle Temperaturen. Tragen Sie eine leichte Jacke und lange Ärmel.", + "🧥 Temperature fresche. Indossa una giacca leggera e maniche lunghe.", + "", + "", + "🧥 Прохладная погода. Наденьте легкую куртку и одежду с длинными рукавами.", + "", + "", + "🧥 Temperaturi racoroase. Purtați o jachetă ușoară și mâneci lungi.", + "🧥 Chladné teploty. Noste ľahkú bundu a dlhé rukávy.", + "", + "" + ], + "🌤️ Mild weather. A light jacket or a sweater should be enough.": [ + "🌤️ Mild weather. A light jacket or a sweater should be enough.", + "🌤️ Clima templado. Una chaqueta ligera o un suéter deberían ser suficientes.", + "", + "🌤️ Mildes Wetter. Eine leichte Jacke oder ein Pullover sollten ausreichen.", + "🌤️ Clima mite. Una giacca leggera o un maglione dovrebbero essere sufficienti.", + "", + "", + "🌤️ Мягкая погода. Легкой куртки или свитера будет достаточно.", + "", + "", + "🌤️ Vreme blândă. Un sacou lejer sau un pulover ar trebui să fie suficient.", + "🌤️ Mierne počasie. Mala by stačiť ľahká bunda alebo sveter.", + "", + "" + ], + "👕 Warm day. A t-shirt and jeans or pants are suitable.": [ + "👕 Warm day. A t-shirt and jeans or pants are suitable.", + "👕 Día cálido. Una camiseta y unos vaqueros o pantalones son adecuados.", + "", + "👕 Warmer Tag. Ein T-Shirt und Jeans oder Hosen reichen aus.", + "👕 Giornata calda. Sono adatti una maglietta e jeans o pantaloni.", + "", + "", + "👕 Теплый день. Подойдет футболка и джинсы или брюки.", + "", + "", + "👕 Zi caldă. Un tricou și blugi sau pantaloni sunt potrivite.", + "👕 Teplý deň. Vhodné je tričko a džínsy alebo nohavice.", + "", + "" + ], + "☀️ Hot! Opt for a t-shirt and light pants or shorts.": [ + "☀️ Hot! Opt for a t-shirt and light pants or shorts.", + "☀️ ¡Caliente! Opta por una camiseta y unos pantalones o shorts claros.", + "", + "☀️ Heiß! Entscheiden Sie sich für ein T-Shirt und eine leichte Hose oder Shorts.", + "☀️ Caldo! Opta per una maglietta e pantaloni leggeri o pantaloncini.", + "", + "", + "☀️ Жарко! Выбирайте футболку и легкие брюки или шорты.", + "", + "", + "☀️ Fierbinte! Optează pentru un tricou și pantaloni lejeri sau pantaloni scurți.", + "☀️ Horúce! Rozhodnite sa pre tričko a svetlé nohavice alebo šortky.", + "", + "" + ], + "🌞 Very hot. Wear light, breathable clothing and stay hydrated.": [ + "🌞 Very hot. Wear light, breathable clothing and stay hydrated.", + "🌞 Mucho calor. Use ropa ligera y transpirable y manténgase hidratado.", + "", + "🌞 Sehr heiß. Tragen Sie leichte, atmungsaktive Kleidung und trinken Sie ausreichend.", + "🌞 Molto caldo. Indossa abiti leggeri e traspiranti e mantieniti idratato.", + "", + "", + "🌞 Очень жарко. Носите легкую, дышащую одежду и пейте много воды.", + "", + "", + "🌞 Foarte cald. Purtați îmbrăcăminte ușoară, respirabilă și rămâneți hidratat.", + "🌞 Veľmi horúce. Noste ľahké, priedušné oblečenie a zostaňte hydratovaní.", + "", + "" + ], + "🔥 Extreme heat! Wear very light clothing, stay hydrated, and avoid direct sun exposure.": [ + "🔥 Extreme heat! Wear very light clothing, stay hydrated, and avoid direct sun exposure.", + "🔥 ¡Calor extremo! Use ropa muy ligera, manténgase hidratado y evite la exposición directa al sol.", + "", + "🔥 Extreme Hitze! Tragen Sie sehr leichte Kleidung, trinken Sie ausreichend und vermeiden Sie direkte Sonneneinstrahlung.", + "🔥 Caldo estremo! Indossa abiti molto leggeri, mantieniti idratato ed evita l'esposizione diretta al sole.", + "", + "", + "🔥 Экстремальная жара! Носите очень легкую одежду, пейте много воды и избегайте прямого воздействия солнца.", + "", + "", + "🔥 Căldură extremă! Purtați îmbrăcăminte foarte ușoară, rămâneți hidratat și evitați expunerea directă la soare.", + "🔥Extrémne teplo! Noste veľmi ľahké oblečenie, zostaňte hydratovaní a vyhýbajte sa priamemu slnečnému žiareniu.", + "", + "" + ], + "⚠️ Dangerously hot! Wear minimal clothing, stay indoors if possible, and drink plenty of water.": [ + "⚠️ Dangerously hot! Wear minimal clothing, stay indoors if possible, and drink plenty of water.", + "⚠️ ¡Hace un calor peligroso! Use ropa mínima, permanezca en el interior si es posible y beba mucha agua.", + "", + "⚠️ Gefährlich heiß! Tragen Sie nur minimale Kleidung, bleiben Sie wenn möglich drinnen und trinken Sie viel Wasser.", + "⚠️ Pericolosamente caldo! Indossate indumenti minimi, restate in casa se possibile e bevete molta acqua.", + "", + "", + "⚠️ Опасно жарко! Надевайте минимум одежды, по возможности оставайтесь в помещении и пейте много воды.", + "", + "", + "⚠️ Periculos de cald! Purtați haine minime, rămâneți în casă dacă este posibil și beți multă apă.", + "⚠️ Nebezpečne horúco! Noste minimálne oblečenie, zostaňte vo vnútri, ak je to možné, a pite veľa vody.", + "", + "" + ], + "🚨 Extreme heat alert! Wear minimal clothing, stay indoors, and drink plenty of water to stay safe.": [ + "🚨 Extreme heat alert! Wear minimal clothing, stay indoors, and drink plenty of water to stay safe.", + "🚨 ¡Alerta de calor extremo! Use ropa mínima, permanezca en el interior y beba mucha agua para mantenerse a salvo.", + "", + "🚨 Warnung vor extremer Hitze! Tragen Sie nur minimale Kleidung, bleiben Sie drinnen und trinken Sie viel Wasser, um sicher zu sein.", + "🚨 Allerta caldo estremo! Indossate indumenti minimi, restate in casa e bevete molta acqua per restare al sicuro.", + "", + "", + "🚨 Внимание, экстремальная жара! Надевайте минимум одежды, оставайтесь в помещении и пейте много воды, чтобы оставаться в безопасности.", + "", + "", + "🚨 Alertă de căldură extremă! Purtați haine minime, rămâneți în casă și beți multă apă pentru a rămâne în siguranță.", + "🚨 Upozornenie na extrémne horúčavy! Noste minimálne oblečenie, zostaňte vnútri a pite veľa vody, aby ste zostali v bezpečí.", + "", + "" + ], + "current_location": [ + "Current location", + "Ubicación actual", + "", + "Aktueller Standort", + "Posizione attuale", + "", + "", + "Текущее местоположение", + "", + "", + "Locația actuală", + "Aktuálna poloha", + "", + "" + ], + "main_temp": [ + "Main temperature", + "Temperatura principal", + "", + "Aktueller Standort", + "Temperatura principale", + "", + "", + "Основная температура", + "", + "", + "Temperatura principală", + "Hlavná teplota", + "", + "" + ], + "pick_a_location": [ + "Pick a location", + "Elija una ubicación", + "", + "Wählen Sie einen Standort", + "Scegli una posizione", + "", + "", + "Выберите место", + "", + "", + "Alegeți o locație", + "Vyberte miesto", + "", + "" + ], +}; + + +// maping + +const langMap = { + 'en': 0, + 'es': 1, + 'fr': 2, + 'de': 3, + 'it': 4, + 'pt': 5, + 'hu': 6, + 'ru': 7, + 'pl': 8, + 'el': 9, + 'ro': 10, + 'sk': 11, + 'zh-Hans': 12, + 'ja': 13, +}; + +function getTranslationByLang(langCode, key) { + const index = langMap[langCode]; + const translationArray = translations[key]; + + if (translationArray && index !== undefined && index < translationArray.length) { + const translation = translationArray[index]; + if (translation && translation.trim() !== "") { + return translation; + } + } + + return translationArray ? translationArray[0] : ''; +} + +function applyTranslations(langCode) { + const elementsToTranslate = document.querySelectorAll('[data-translate]'); + elementsToTranslate.forEach(el => { + const translationKey = el.getAttribute('data-translate'); + el.textContent = getTranslationByLang(langCode, translationKey); + }); +} diff --git a/app/src/main/assets/modules/pixel-components.js b/app/src/main/assets/modules/pixel-components.js index afec87c82..2ccbfdac8 100644 --- a/app/src/main/assets/modules/pixel-components.js +++ b/app/src/main/assets/modules/pixel-components.js @@ -70,28 +70,24 @@ const Uv_13 = 'Extreme risk of harm from unprotected sun exposure, full protecti const aqiText = { 1: { - level: "Good", - message: "Air quality is considered satisfactory, and air pollution poses little or no risk.", + level: "good", + message: "air_quality_satisfactory", }, 2: { - level: "Fair", - message: "Air quality is acceptable; however, for some pollutants there may be a moderate health concern for a very small number of people who are unusually sensitive to air pollution.", - + level: "fair", + message: "air_quality_acceptable", }, 3: { - level: "Moderate", - message: "Member of sensitive groups may experience health effects. The general public is not likely to be affected.", - + level: "moderate", + message: "sensitive_groups_health_effects", }, 4: { - level: "Poor", - message: "Everyone may begin to experience health effects; member of sensitive groups may experience more serious health effects.", - + level: "poor", + message: "health_effects_public", }, 5: { - level: "Very Poor", - message: "Health warnings of emergency conditions. The entire population is more likely to be affected.", + level: "very_poor", + message: "emergency_conditions", } -} - +}; diff --git a/app/src/main/assets/modules/units.js b/app/src/main/assets/modules/units.js index 309a15d13..83d0574ea 100644 --- a/app/src/main/assets/modules/units.js +++ b/app/src/main/assets/modules/units.js @@ -207,126 +207,126 @@ function GetWeatherLabel(iconCode, isDay) { if (isDay === 1) { if (iconCode === 0) { - return 'Clear sky' + return 'clear_sky' } else if (iconCode === 1) { - return 'Mostly clear' + return 'mostly_clear' } else if (iconCode === 2) { - return 'Partly cloudy' + return 'partly_cloudy' } else if (iconCode === 3) { - return 'Overcast' + return 'overcast' } else if (iconCode === 45 || iconCode === 48) { - return 'Fog' + return 'fog' } else if (iconCode === 51 || iconCode === 53 || iconCode === 55) { - return 'Drizzle' + return 'drizzle' } else if (iconCode === 56 || iconCode === 57) { - return 'Freezing Drizzle' + return 'freezing_drizzle' } else if (iconCode === 61 || iconCode === 63) { - return 'Moderate rain' + return 'moderate_rain' } else if (iconCode === 65) { - return 'Heavy intensity rain' + return 'heavy_intensity_rain' } else if (iconCode === 66 || iconCode === 67) { - return 'Freezing Rain' + return 'freezing_rain' } else if (iconCode === 71) { - return 'Slight snow' + return 'slight_snow' } else if (iconCode === 73) { - return 'Moderate snow' + return 'moderate_snow' } else if (iconCode === 75) { - return 'Heavy intensity snow' + return 'heavy_intensity_snow' } else if (iconCode === 77) { - return 'Snow grains' + return 'snow_grains' } else if (iconCode === 80 || iconCode === 81) { - return 'Rain showers' + return 'rain_showers' } else if (iconCode === 82) { - return 'Heavy rain showers' + return 'heavy_rain_showers' } else if (iconCode === 85) { - return 'Slight snow showers' + return 'slight_snow_showers' } else if (iconCode === 86) { - return 'Heavy snow showers' + return 'heavy_snow_showers' } else if (iconCode === 95) { - return 'Thunderstorm' + return 'thunderstorm' } else if (iconCode === 96 || iconCode === 99) { - return 'Strong thunderstorm' + return 'strong_thunderstorm' } } else { if (iconCode === 0) { - return 'Clear sky' + return 'clear_sky' } else if (iconCode === 1) { - return 'Mostly clear' + return 'mostly_clear' } else if (iconCode === 2) { - return 'Partly cloudy' + return 'partly_cloudy' } else if (iconCode === 3) { - return 'Overcast' + return 'overcast' } else if (iconCode === 45 || iconCode === 48) { - return 'Fog' + return 'fog' } else if (iconCode === 51 || iconCode === 53 || iconCode === 55) { - return 'Drizzle' + return 'drizzle' } else if (iconCode === 56 || iconCode === 57) { - return 'Freezing Drizzle' + return 'freezing_drizzle' } else if (iconCode === 61 || iconCode === 63) { - return 'Moderate rain' + return 'moderate_rain' } else if (iconCode === 65) { - return 'Heavy intensity rain' + return 'heavy_intensity_rain' } else if (iconCode === 66 || iconCode === 67) { - return 'Freezing Rain' + return 'freezing_rain' } else if (iconCode === 71) { - return 'Slight snow' + return 'slight_snow' } else if (iconCode === 73) { - return 'Moderate snow' + return 'moderate_snow' } else if (iconCode === 75) { - return 'Heavy intensity snow' + return 'heavy_intensity_snow' } else if (iconCode === 77) { - return 'Snow grains' + return 'snow_grains' } else if (iconCode === 80 || iconCode === 81) { - return 'Rain showers' + return 'rain_showers' } else if (iconCode === 82) { - return 'Heavy rain showers' + return 'heavy_rain_showers' } else if (iconCode === 85) { - return 'Slight snow showers' + return 'slight_snow_showers' } else if (iconCode === 86) { - return 'Heavy snow showers' + return 'heavy_snow_showers' } else if (iconCode === 95) { - return 'Thunderstorm' + return 'thunderstorm' } else if (iconCode === 96 || iconCode === 99) { - return 'Strong thunderstorm' + return 'strong_thunderstorm' } } @@ -334,7 +334,15 @@ function GetWeatherLabel(iconCode, isDay) { - return WeatherLabel + return '' +} + +function getWeatherLabelInLang(iconCode, isDay, langCode) { + const translationKey = GetWeatherLabel(iconCode, isDay); + + const translatedLabel = getTranslationByLang(langCode, translationKey); + + return translatedLabel || 'Unknown weather'; } diff --git a/app/src/main/assets/pages/AboutPage.html b/app/src/main/assets/pages/AboutPage.html index b735dcb23..48861509c 100644 --- a/app/src/main/assets/pages/AboutPage.html +++ b/app/src/main/assets/pages/AboutPage.html @@ -4,6 +4,7 @@ about Page + @@ -54,47 +55,47 @@ arrow_back -

About WeatherMaster

+

About WeatherMaster

-

About WeatherMaster

+

About WeatherMaster

privacy_tip -
Terms and Conditions
+
Terms and Conditions
policy -
Privacy Policy
+
Privacy Policy
code -
View source code
+
View source code
system_update -
Latest version
+
Latest version
copyright -
Third party licenses
+
Third party licenses
info -
Version
-
1.6.1 (W)
+
App version
+
1.6.2 (W)
@@ -116,6 +117,11 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/pages/forecastPage.html b/app/src/main/assets/pages/forecastPage.html index 7ae0eb18d..aae1afd20 100644 --- a/app/src/main/assets/pages/forecastPage.html +++ b/app/src/main/assets/pages/forecastPage.html @@ -5,6 +5,7 @@ Forecast page + @@ -27,7 +28,7 @@ arrow_back -

14-day forecast

+

14-day forecast

@@ -52,6 +53,12 @@ @@ -202,7 +203,7 @@ arrow_back -

Live Radar

+

Live Radar

@@ -263,6 +264,12 @@ @@ -42,28 +43,34 @@ arrow_back -

Settings

+

Settings

-

Settings

+

Settings

-

Weather

+

Weather

- + notifications -
Notification bar
-
Show weather information in the notifications bar
+
Notification bar
+
Show weather information in the notifications bar
+ + thermostat +
Main temperature
+
Open-Meteo
+
+ home_pin -
Home location
-
You need to save locations to show in the menu
+
Home location
+
You need to save locations to show in the menu
Your device location
chevron_right @@ -81,7 +88,7 @@ device_thermostat -
Temperature Unit
+
Temperature Unit
°F
@@ -95,7 +102,7 @@ airwave -
Wind Unit
+
Wind Unit
Km/h
@@ -108,7 +115,7 @@ visibility -
Visibility Unit
+
Visibility Unit
km
@@ -121,7 +128,7 @@ rainy_light -
Precipitation Unit
+
Precipitation Unit
mm
@@ -135,7 +142,7 @@ av_timer -
Pressure Unit
+
Pressure Unit
hPa
@@ -151,26 +158,26 @@
-

Additional

+

Additional

- -
App language
-
English (Translation soon)
- open_in_new + + language +
App language
+
English
info -
About WeatherMaster
-
Learn about the app
+
About WeatherMaster
+
Learn about the app
chevron_right
favorite -
Support
+
Support
On Ko-Fi
open_in_new
@@ -178,7 +185,7 @@
-

Data provided by

+

Data provided by

OpenWeatherMap
@@ -196,7 +203,7 @@ -

Map

+

Map

Leaflet
@@ -233,6 +240,28 @@ diff --git a/app/src/main/assets/ui-files/ui.css b/app/src/main/assets/ui-files/ui.css index 262aca5d2..2ddf613b5 100644 --- a/app/src/main/assets/ui-files/ui.css +++ b/app/src/main/assets/ui-files/ui.css @@ -273,6 +273,7 @@ touch_search{ color: var(--On-Surface-Variant); font-family: var(--outfit); font-size: 15px; + text-align: right; } diff --git a/app/src/main/java/com/example/weathermaster/LanguagePage.java b/app/src/main/java/com/example/weathermaster/LanguagePage.java new file mode 100644 index 000000000..2e22fc4a0 --- /dev/null +++ b/app/src/main/java/com/example/weathermaster/LanguagePage.java @@ -0,0 +1,212 @@ +package com.example.weathermaster; + + +import android.animation.ArgbEvaluator; +import android.animation.ObjectAnimator; +import android.annotation.SuppressLint; +import android.content.Intent; +import android.graphics.Color; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.view.View; +import android.view.WindowManager; +import android.webkit.JavascriptInterface; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.ProgressBar; +import android.widget.Toast; + + +import androidx.annotation.RequiresApi; +import androidx.appcompat.app.AppCompatActivity; + +public class LanguagePage extends AppCompatActivity { + + private WebView webview; + + public void onBackPressed() { + super.onBackPressed(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + + + + setContentView(R.layout.activity_main); + + + + // Webview stuff + webview = findViewById(R.id.webView); + WebSettings webSettings = webview.getSettings(); + webSettings.setJavaScriptEnabled(true); + webSettings.setDomStorageEnabled(true); + webSettings.setAllowFileAccessFromFileURLs(true); + webSettings.setAllowUniversalAccessFromFileURLs(true); + webSettings.setAllowContentAccess(true); + webview.setVerticalScrollBarEnabled(true); + webview.setHorizontalScrollBarEnabled(false); + webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER); + webview.setWebViewClient(new WebViewClientDemo()); + AndroidInterface androidInterface = new AndroidInterface(this); + webview.addJavascriptInterface(androidInterface, "AndroidInterface"); + webview.setBackgroundColor(getResources().getColor(R.color.mainBG)); + setTheme(R.style.blue_caret); + webview.loadUrl("file:///android_asset/pages/LanguagesPage.html"); + + } + + + + + public class AndroidInterface { + private LanguagePage aActivity; + + AndroidInterface(LanguagePage activity) { + aActivity = activity; + } + + @JavascriptInterface + public void updateStatusBarColor(final String color) { + aActivity.runOnUiThread(new Runnable() { + @SuppressLint("ResourceType") + @RequiresApi(api = Build.VERSION_CODES.O) + @Override + public void run() { + int statusBarColor; + int navigationBarColor; + int systemUiVisibilityFlags = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR; + + + if(color.equals("Scrolled")){ + statusBarColor = 0xFF1e2024; + navigationBarColor = 0xFF121317; + systemUiVisibilityFlags = 0; + + } else if (color.equals("ScrollFalse")) { + statusBarColor = 0xFF121317; + navigationBarColor = 0xFF121317; + systemUiVisibilityFlags = 0; + + } else if (color.equals("GoBack")){ + back(); + return; + } else if (color.equals("OpenTermsConditions")){ + + return; + } else if (color.equals("OpenPrivacyPolicy")){ + + return; + } else if (color.equals("OpenLicenses")){ + + return; + + } else if (color.equals("bluesetDef")) { + + return; + } else if (color.equals("keepiton")) { + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + return; + } else if (color.equals("keepitoff")) { + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + return; + } else if (color.equals("itsOn")) { + Toast.makeText(aActivity, "Your device will stay awake", Toast.LENGTH_SHORT).show(); + return; + } else if (color.equals("ItsOff")) { + Toast.makeText(aActivity, "Your device will go to sleep at the default time", Toast.LENGTH_SHORT).show(); + return; + + + } else { + Toast.makeText(aActivity, "not found", Toast.LENGTH_SHORT).show(); + return; + } + + + int currentStatusBarColor = aActivity.getWindow().getStatusBarColor(); + int currentNavigationBarColor = aActivity.getWindow().getNavigationBarColor(); + + ObjectAnimator statusBarAnimator = ObjectAnimator.ofObject( + aActivity.getWindow(), + "statusBarColor", + new ArgbEvaluator(), + currentStatusBarColor, + statusBarColor + ); + + statusBarAnimator.setDuration(200); + statusBarAnimator.start(); + + ObjectAnimator navBarAnimator = ObjectAnimator.ofObject( + aActivity.getWindow(), + "navigationBarColor", + new ArgbEvaluator(), + currentNavigationBarColor, + navigationBarColor + ); + + navBarAnimator.setDuration(200); + navBarAnimator.start(); + + aActivity.getWindow().setNavigationBarColor(navigationBarColor); + + View decorView = aActivity.getWindow().getDecorView(); + decorView.setSystemUiVisibility(systemUiVisibilityFlags); + + + } + }); + } + + + + } + + public void back() { + onBackPressed(); + } + + + + private static class WebViewClientDemo extends WebViewClient { + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (shouldOpenInBrowser(url)) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + view.getContext().startActivity(intent); + return true; + + } else { + view.loadUrl(url); + return true; + + + } + + + } + + private boolean shouldOpenInBrowser(String url) { + return url.startsWith("https://poeditor.com/join/project/DxrGXdoUGF") || + url.startsWith("https://openweathermap.org/") || + url.startsWith("https://fonts.google.com/specimen/Poppins?query=poppins") || + url.startsWith("https://github.com/material-components/material-web") || + url.startsWith("https://app-privacy-policy-generator.nisrulz.com/") || + url.startsWith("https://github.com/PranshulGG/WeatherMaster") || + url.startsWith("mailto:pranshul.devmain@gmail.com")|| + url.startsWith("https://github.com/PranshulGG/WeatherMaster/releases"); + + + } + + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/weathermaster/SettingsActivity.java b/app/src/main/java/com/example/weathermaster/SettingsActivity.java index 88a3647dc..e968e4853 100644 --- a/app/src/main/java/com/example/weathermaster/SettingsActivity.java +++ b/app/src/main/java/com/example/weathermaster/SettingsActivity.java @@ -99,7 +99,9 @@ public class SettingsActivity extends AppCompatActivity { } else if (color.equals("OpenAboutPage")){ openAboutPage(); return; - + } else if (color.equals("OpenLanguagesPage")){ + openLanguagesPage(); + return; } else if (color.equals("bluesetDef")) { return; @@ -163,7 +165,10 @@ public class SettingsActivity extends AppCompatActivity { Intent intent = new Intent(sActivity, AboutPage.class); sActivity.startActivity(intent); } - + public void openLanguagesPage() { + Intent intent = new Intent(sActivity, LanguagePage.class); + sActivity.startActivity(intent); + } } diff --git a/release/output-metadata.json b/release/output-metadata.json index 470c3d99a..382d57d2b 100644 --- a/release/output-metadata.json +++ b/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 52, - "versionName": "1.6.1 (W)", + "versionCode": 53, + "versionName": "1.6.2 (W)", "outputFile": "app-release.apk" } ],