Skip to content

Commit 60fb36e

Browse files
authored
Merge pull request #470 from fedkakatorjnii/feat-complement-localization
feat(weather-api-widget): Change localizations
2 parents efc19b1 + d0ca88e commit 60fb36e

File tree

7 files changed

+136
-60
lines changed

7 files changed

+136
-60
lines changed

weather-api-widget/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ following config parameters:
2323
| show_daily_forecast | false | Show forecast for next three days |
2424
| show_hourly_forecast | false | Show hourly forecast section |
2525
| timeout | 120 | How often in seconds the widget refreshes |
26+
| lang | The language of your system from the environment (`LANG` variable) or `en`. Languages currently supported: `de`, `en`, `fr`, `pt`, `ru`. | Widget's language |
2627

2728
In [#461](https://github.com/streetturtle/awesome-wm-widgets/issues/461) it was
2829
reported that some machines replace the dot with a comma in coordinates. If
@@ -49,6 +50,7 @@ widget's source.
4950
weather_api_widget({
5051
api_key='<your-key>',
5152
coordinates = {45.5017, -73.5673},
53+
lang = 'en',
5254
units = 'imperial',
5355
font_name = 'Carter One',
5456
icons = 'VitalyGorbachev',
@@ -107,6 +109,7 @@ weather_api_widget({
107109
weather_api_widget({
108110
api_key='<your-key>',
109111
coordinates = {45.5017, -73.5673},
112+
lang = 'en',
110113
units = 'imperial',
111114
font_name = 'Carter One',
112115
icons = 'VitalyGorbachev',

weather-api-widget/locale/de.lua

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
local de = {
2-
warning_title = "Wetter Widget",
3-
parameter_warning = "Folgende benötigte Parameter fehlen: ",
4-
directions = {
5-
"N", "NNO", "NO", "ONO", "O", "OSO", "SO", "SSO", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N"
2+
warning_title = "Wetter Widget",
3+
parameter_warning = "Folgende benötigte Parameter fehlen: ",
4+
directions = {
5+
"N", "NNO", "NO", "ONO", "O", "OSO", "SO", "SSO", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N"
66
},
7-
feels_like = "Gefühlt: ",
8-
wind = "Wind: ",
9-
humidity = "Luftfeuchtigkeit: ",
10-
uv = "UV-Index: "
7+
feels_like = "Gefühlt: ",
8+
wind = "Wind: ",
9+
humidity = "Luftfeuchtigkeit: ",
10+
uv = "UV-Index: ",
11+
days = {
12+
Mon = "Mo",
13+
Tue = "Di",
14+
Wed = "Mi",
15+
Thu = "Do",
16+
Fri = "Fr",
17+
Sat = "Sa",
18+
Sun = "So",
19+
}
1120
}
1221

1322
return de

weather-api-widget/locale/en.lua

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
local en = {
2-
warning_title = "Weather Widget",
3-
parameter_warning = "Required parameters are not set: ",
4-
directions = {
5-
"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW",
6-
"WSW", "W", "WNW", "NW", "NNW", "N"
7-
},
8-
feels_like = "Feels like ",
9-
wind = "Wind: ",
10-
humidity = "Humidity: ",
11-
uv = "UV: "
2+
warning_title = "Weather Widget",
3+
parameter_warning = "Required parameters are not set: ",
4+
directions = {
5+
"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW",
6+
"WSW", "W", "WNW", "NW", "NNW", "N"
7+
},
8+
feels_like = "Feels like ",
9+
wind = "Wind: ",
10+
humidity = "Humidity: ",
11+
uv = "UV: ",
12+
days = {
13+
Mon = "Mon",
14+
Tue = "Tue",
15+
Wed = "Wed",
16+
Thu = "Thu",
17+
Fri = "Fri",
18+
Sat = "Sat",
19+
Sun = "Sun",
20+
},
1221
}
1322

1423
return en

weather-api-widget/locale/fr.lua

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
1-
local fr = {
2-
warning_title = "Widget Météo",
3-
parameter_warning = "Les paramètres suivants sont obligatoires : ",
4-
directions = {
5-
"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSO", "SO",
6-
"OSO", "O", "ONO", "NO", "NNO", "N"
7-
},
8-
feels_like = "ressentie à ",
9-
wind = "Vent : ",
10-
humidity = "Humidité : ",
11-
uv = "Indice UV : "
1+
local fr = {
2+
warning_title = "Widget Météo",
3+
parameter_warning = "Les paramètres suivants sont obligatoires : ",
4+
directions = {
5+
"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSO", "SO",
6+
"OSO", "O", "ONO", "NO", "NNO", "N"
7+
},
8+
feels_like = "ressentie à ",
9+
wind = "Vent : ",
10+
humidity = "Humidité : ",
11+
uv = "Indice UV : ",
12+
days = {
13+
Mon = "Lu",
14+
Tue = "Ma",
15+
Wed = "Me",
16+
Thu = "Je",
17+
Fri = "Ve",
18+
Sat = "Sa",
19+
Sun = "Di",
20+
},
1221
}
1322

1423
return fr

weather-api-widget/locale/pt.lua

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
local pt = {
2-
warning_title = "Widget do tempo",
3-
parameter_warning = "Parâmetros necessários não definidos: ",
4-
directions = {
5-
"N", "NNE", "NE", "ENE", "L", "ESE", "SE", "SSE", "S", "SSO", "SO",
6-
"OSO", "O", "ONO", "NO", "NNO", "N"
7-
},
8-
feels_like = "Sensação de ",
9-
wind = "Vento: ",
10-
humidity = "Umidade: ",
11-
uv = "UV: "
2+
warning_title = "Widget do tempo",
3+
parameter_warning = "Parâmetros necessários não definidos: ",
4+
directions = {
5+
"N", "NNE", "NE", "ENE", "L", "ESE", "SE", "SSE", "S", "SSO", "SO",
6+
"OSO", "O", "ONO", "NO", "NNO", "N"
7+
},
8+
feels_like = "Sensação de ",
9+
wind = "Vento: ",
10+
humidity = "Umidade: ",
11+
uv = "UV: ",
12+
days = {
13+
Mon = "Mon",
14+
Tue = "Tue",
15+
Wed = "Wed",
16+
Thu = "Thu",
17+
Fri = "Fri",
18+
Sat = "Sat",
19+
Sun = "Sun",
20+
},
1221
}
1322

1423
return pt

weather-api-widget/locale/ru.lua

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
local ru = {
2+
warning_title = "Погода",
3+
parameter_warning = "Необходимые параметры не установлены: ",
4+
directions = {
5+
"С", "ССВ", "СВ", "ВСВ", "В", "ВЮВ", "ЮВ", "ЮЮВ", "Ю", "ЮЮЗ", "ЮЗ",
6+
"ЗЮЗ", "З", "ЗСЗ", "СЗ", "ССЗ", "С",
7+
},
8+
feels_like = "Ощущается как ",
9+
wind = "Ветер: ",
10+
humidity = "Влажность: ",
11+
uv = "UV: ",
12+
days = {
13+
Mon = "Пн",
14+
Tue = "Вт",
15+
Wed = "Ср",
16+
Thu = "Чт",
17+
Fri = "Пт",
18+
Sat = "Сб",
19+
Sun = "Вс",
20+
}
21+
}
22+
23+
return ru

weather-api-widget/weather.lua

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,44 @@ local gears = require("gears")
1515
local beautiful = require("beautiful")
1616

1717
local HOME_DIR = os.getenv("HOME")
18-
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/weather-widget'
18+
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/weather-api-widget'
1919
local GET_FORECAST_CMD = [[bash -c "curl -s --show-error -X GET '%s'"]]
2020

2121
local SYS_LANG = os.getenv("LANG"):sub(1, 2)
2222
if SYS_LANG == "C" or SYS_LANG == "C." then
2323
-- C-locale is a common fallback for simple English
2424
SYS_LANG = "en"
2525
end
26-
-- default language is ENglish
27-
local LANG = gears.filesystem.file_readable(WIDGET_DIR .. "/" .. "locale/" ..
28-
SYS_LANG .. ".lua") and SYS_LANG or "en"
29-
local LCLE = require("awesome-wm-widgets.weather-widget.locale." .. LANG)
30-
-- WeatherAPI supports only these according to https://www.weatherapi.com/docs/
31-
-- ar, bn, bg, zh, zh_tw, cs, da, nl, fi, fr, de, el, hi, hu, it, ja, jv, ko,
32-
-- zh_cmn, mr, pl, pt, pa, ro, ru, sr, si, sk, es, sv, ta, te, tr, uk, ur, vi,
33-
-- zh_wuu, zh_hsn, zh_yue, zu
34-
3526

36-
local function show_warning(message)
27+
local function show_warning(message, locale)
3728
naughty.notify {
3829
preset = naughty.config.presets.critical,
39-
title = LCLE.warning_title,
30+
title = locale.warning_title,
4031
text = message
4132
}
4233
end
4334

44-
if SYS_LANG ~= LANG then
45-
show_warning("Your language is not supported yet. Language set to English")
35+
local function get_locale(data)
36+
-- WeatherAPI supports only these according to https://www.weatherapi.com/docs/
37+
-- ar, bn, bg, zh, zh_tw, cs, da, nl, fi, fr, de, el, hi, hu, it, ja, jv, ko,
38+
-- zh_cmn, mr, pl, pt, pa, ro, ru, sr, si, sk, es, sv, ta, te, tr, uk, ur, vi,
39+
-- zh_wuu, zh_hsn, zh_yue, zu
40+
41+
-- default language is ENglish
42+
local lang = gears.filesystem.file_readable(
43+
WIDGET_DIR .. "/" .. "locale/" .. data .. ".lua"
44+
) and data or "en"
45+
46+
local locale = require("awesome-wm-widgets.weather-api-widget.locale." .. lang)
47+
48+
if data ~= lang then
49+
show_warning(
50+
string.format("Your language (%s) is not supported yet. Language set to English", data),
51+
locale
52+
)
53+
end
54+
55+
return locale
4656
end
4757

4858
local weather_widget = {}
@@ -162,7 +172,7 @@ local function worker(user_args)
162172

163173
--- Validate required parameters
164174
if args.coordinates == nil or args.api_key == nil then
165-
show_warning(LCLE.parameter_warning ..
175+
show_warning(locale.parameter_warning ..
166176
(args.coordinates == nil and '<b>coordinates</b>' or '') ..
167177
(args.api_key == nil and ', <b>api_key</b> ' or ''))
168178
return
@@ -172,6 +182,7 @@ local function worker(user_args)
172182
local api_key = args.api_key
173183
local font_name = args.font_name or beautiful.font:gsub("%s%d+$", "")
174184
local units = args.units or 'metric'
185+
local lang = args.lang or SYS_LANG
175186
local time_format_12h = args.time_format_12h
176187
local both_units_widget = args.both_units_widget or false
177188
local icon_pack_name = args.icons or 'weather-underground-icons'
@@ -181,12 +192,15 @@ local function worker(user_args)
181192
local show_hourly_forecast = args.show_hourly_forecast or false
182193
local timeout = args.timeout or 120
183194
local ICONS_DIR = WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/'
195+
196+
local locale = get_locale(lang)
197+
184198
-- Forecast endpoint includes current. I could map show_daily_forecast to days here.
185199
-- Currently overfetching but only showing when opting in.
186200
local weather_api =
187201
('https://api.weatherapi.com/v1/forecast.json' ..
188202
'?q=' .. coordinates[1] .. ',' .. coordinates[2] .. '&key=' .. api_key ..
189-
'&units=' .. units .. '&lang=' .. LANG .. '&days=3')
203+
'&units=' .. units .. '&lang=' .. lang .. '&days=3')
190204

191205
weather_widget = wibox.widget {
192206
{
@@ -303,12 +317,12 @@ local function worker(user_args)
303317
ICONS_DIR .. icon_map[weather.condition.code] .. day_night_extension .. icons_extension)
304318
self:get_children_by_id('temp')[1]:set_text(gen_temperature_str(weather.temp_c, '%.0f', false, units))
305319
self:get_children_by_id('feels_like_temp')[1]:set_text(
306-
LCLE.feels_like .. gen_temperature_str(weather.feelslike_c, '%.0f', false, units))
320+
locale.feels_like .. gen_temperature_str(weather.feelslike_c, '%.0f', false, units))
307321
self:get_children_by_id('description')[1]:set_text(weather.condition.text)
308322
self:get_children_by_id('wind')[1]:set_markup(
309-
LCLE.wind .. '<b>' .. weather.wind_kph .. 'km/h (' .. weather.wind_dir .. ')</b>')
310-
self:get_children_by_id('humidity')[1]:set_markup(LCLE.humidity .. '<b>' .. weather.humidity .. '%</b>')
311-
self:get_children_by_id('uv')[1]:set_markup(LCLE.uv .. uvi_index_color(weather.uv))
323+
locale.wind .. '<b>' .. weather.wind_kph .. 'km/h (' .. weather.wind_dir .. ')</b>')
324+
self:get_children_by_id('humidity')[1]:set_markup(locale.humidity .. '<b>' .. weather.humidity .. '%</b>')
325+
self:get_children_by_id('uv')[1]:set_markup(locale.uv .. uvi_index_color(weather.uv))
312326
end
313327
}
314328

@@ -324,7 +338,7 @@ local function worker(user_args)
324338

325339
local day_forecast = wibox.widget {
326340
{
327-
text = os.date('%a', tonumber(day.date_epoch)),
341+
text = locale.days[os.date('%a', tonumber(day.date_epoch))],
328342
align = 'center',
329343
font = font_name .. ' 9',
330344
widget = wibox.widget.textbox

0 commit comments

Comments
 (0)