|
|
@ -20,8 +20,8 @@ import (
|
|
|
|
"time"
|
|
|
|
"time"
|
|
|
|
"unicode/utf8"
|
|
|
|
"unicode/utf8"
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/mattn/go-colorable"
|
|
|
|
|
|
|
|
"github.com/klauspost/lctime"
|
|
|
|
"github.com/klauspost/lctime"
|
|
|
|
|
|
|
|
"github.com/mattn/go-colorable"
|
|
|
|
"github.com/mattn/go-runewidth"
|
|
|
|
"github.com/mattn/go-runewidth"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
@ -334,7 +334,7 @@ var (
|
|
|
|
"nl": "nl_NL",
|
|
|
|
"nl": "nl_NL",
|
|
|
|
"nn": "nn_NO",
|
|
|
|
"nn": "nn_NO",
|
|
|
|
"pt": "pt_PT",
|
|
|
|
"pt": "pt_PT",
|
|
|
|
"pt-br":"pt_BR",
|
|
|
|
"pt-br": "pt_BR",
|
|
|
|
"pl": "pl_PL",
|
|
|
|
"pl": "pl_PL",
|
|
|
|
"ro": "ro_RO",
|
|
|
|
"ro": "ro_RO",
|
|
|
|
"ru": "ru_RU",
|
|
|
|
"ru": "ru_RU",
|
|
|
@ -351,8 +351,8 @@ var (
|
|
|
|
"vi": "vi_VN",
|
|
|
|
"vi": "vi_VN",
|
|
|
|
"zu": "zu_ZA",
|
|
|
|
"zu": "zu_ZA",
|
|
|
|
"zh": "zh_CN",
|
|
|
|
"zh": "zh_CN",
|
|
|
|
"zh-cn":"zh_CN",
|
|
|
|
"zh-cn": "zh_CN",
|
|
|
|
"zh-tw":"zh_TW",
|
|
|
|
"zh-tw": "zh_TW",
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
localizedCaption = map[string]string{
|
|
|
|
localizedCaption = map[string]string{
|
|
|
@ -406,7 +406,7 @@ var (
|
|
|
|
"sk": "Predpoveď počasia pre:",
|
|
|
|
"sk": "Predpoveď počasia pre:",
|
|
|
|
"sl": "Vremenska napoved za",
|
|
|
|
"sl": "Vremenska napoved za",
|
|
|
|
"sr": "Временска прогноза за:",
|
|
|
|
"sr": "Временска прогноза за:",
|
|
|
|
"sr-lat":"Vremenska prognoza za:",
|
|
|
|
"sr-lat": "Vremenska prognoza za:",
|
|
|
|
"sv": "Väderleksprognos för:",
|
|
|
|
"sv": "Väderleksprognos för:",
|
|
|
|
"sw": "Ripoti ya hali ya hewa, jiji la:",
|
|
|
|
"sw": "Ripoti ya hali ya hewa, jiji la:",
|
|
|
|
"te": "వాతావరణ సమాచారము:",
|
|
|
|
"te": "వాతావరణ సమాచారము:",
|
|
|
@ -422,70 +422,70 @@ var (
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
daytimeTranslation = map[string][]string{
|
|
|
|
daytimeTranslation = map[string][]string{
|
|
|
|
"af":{"Oggend","Middag", "Vroegaand", "Laatnag"},
|
|
|
|
"af": {"Oggend", "Middag", "Vroegaand", "Laatnag"},
|
|
|
|
"ar":{ "ﺎﻠﻠﻴﻟ", "ﺎﻠﻤﺳﺍﺀ", "ﺎﻠﻈﻫﺭ", "ﺎﻠﺼﺑﺎﺣ" },
|
|
|
|
"ar": {"ﺎﻠﻠﻴﻟ", "ﺎﻠﻤﺳﺍﺀ", "ﺎﻠﻈﻫﺭ", "ﺎﻠﺼﺑﺎﺣ"},
|
|
|
|
"az":{"Səhər", "Gün", "Axşam", "Gecə" },
|
|
|
|
"az": {"Səhər", "Gün", "Axşam", "Gecə"},
|
|
|
|
"be":{"Раніца", "Дзень", "Вечар", "Ноч" },
|
|
|
|
"be": {"Раніца", "Дзень", "Вечар", "Ноч"},
|
|
|
|
"bg":{"Сутрин", "Обяд", "Вечер", "Нощ" },
|
|
|
|
"bg": {"Сутрин", "Обяд", "Вечер", "Нощ"},
|
|
|
|
"bs":{"Ujutro", "Dan", "Večer", "Noć" },
|
|
|
|
"bs": {"Ujutro", "Dan", "Večer", "Noć"},
|
|
|
|
"cs":{"Ráno", "Ve dne", "Večer", "V noci"},
|
|
|
|
"cs": {"Ráno", "Ve dne", "Večer", "V noci"},
|
|
|
|
"ca":{"Matí", "Dia", "Tarda", "Nit" },
|
|
|
|
"ca": {"Matí", "Dia", "Tarda", "Nit"},
|
|
|
|
"cy":{"Bore", "Dydd", "Hwyr", "Nos" },
|
|
|
|
"cy": {"Bore", "Dydd", "Hwyr", "Nos"},
|
|
|
|
"da":{"Morgen", "Middag", "Aften", "Nat" },
|
|
|
|
"da": {"Morgen", "Middag", "Aften", "Nat"},
|
|
|
|
"de":{"Früh", "Mittag", "Abend", "Nacht" },
|
|
|
|
"de": {"Früh", "Mittag", "Abend", "Nacht"},
|
|
|
|
"el":{"Πρωί", "Μεσημέρι", "Απόγευμα", "Βράδυ" },
|
|
|
|
"el": {"Πρωί", "Μεσημέρι", "Απόγευμα", "Βράδυ"},
|
|
|
|
"en":{"Morning","Noon", "Evening", "Night" },
|
|
|
|
"en": {"Morning", "Noon", "Evening", "Night"},
|
|
|
|
"eo":{"Mateno", "Tago", "Vespero", "Nokto" },
|
|
|
|
"eo": {"Mateno", "Tago", "Vespero", "Nokto"},
|
|
|
|
"es":{"Mañana", "Mediodía", "Tarde", "Noche" },
|
|
|
|
"es": {"Mañana", "Mediodía", "Tarde", "Noche"},
|
|
|
|
"et":{"Hommik", "Päev", "Õhtu", "Öösel" },
|
|
|
|
"et": {"Hommik", "Päev", "Õhtu", "Öösel"},
|
|
|
|
"eu":{"Goiza", "Eguerdia", "Arratsaldea", "Gaua" },
|
|
|
|
"eu": {"Goiza", "Eguerdia", "Arratsaldea", "Gaua"},
|
|
|
|
"fa":{ "حبص", "رهظ", "رصع", "بش" },
|
|
|
|
"fa": {"حبص", "رهظ", "رصع", "بش"},
|
|
|
|
"fi":{"Aamu", "Keskipäivä", "Ilta", "Yö" },
|
|
|
|
"fi": {"Aamu", "Keskipäivä", "Ilta", "Yö"},
|
|
|
|
"fr":{"Matin", "Après-midi", "Soir", "Nuit" },
|
|
|
|
"fr": {"Matin", "Après-midi", "Soir", "Nuit"},
|
|
|
|
"fy":{"Moarns", "Middeis", "Jûns", "Nachts"},
|
|
|
|
"fy": {"Moarns", "Middeis", "Jûns", "Nachts"},
|
|
|
|
"ga":{"Maidin", "Nóin", "Tráthnóna","Oíche"},
|
|
|
|
"ga": {"Maidin", "Nóin", "Tráthnóna", "Oíche"},
|
|
|
|
"he":{ "רקוב", "םוֹיְ", "ברֶעֶ", "הלָיְלַ" },
|
|
|
|
"he": {"רקוב", "םוֹיְ", "ברֶעֶ", "הלָיְלַ"},
|
|
|
|
"hr":{"Jutro", "Dan", "Večer", "Noć" },
|
|
|
|
"hr": {"Jutro", "Dan", "Večer", "Noć"},
|
|
|
|
"hu":{"Reggel", "Dél", "Este", "Éjszaka"},
|
|
|
|
"hu": {"Reggel", "Dél", "Este", "Éjszaka"},
|
|
|
|
"hy":{"Առավոտ", "Կեսօր", "Երեկո", "Գիշեր" },
|
|
|
|
"hy": {"Առավոտ", "Կեսօր", "Երեկո", "Գիշեր"},
|
|
|
|
"ia":{"Matino", "Mediedie", "Vespere", "Nocte"},
|
|
|
|
"ia": {"Matino", "Mediedie", "Vespere", "Nocte"},
|
|
|
|
"id":{"Pagi", "Hari", "Petang", "Malam" },
|
|
|
|
"id": {"Pagi", "Hari", "Petang", "Malam"},
|
|
|
|
"it":{"Mattina","Pomeriggio", "Sera", "Notte" },
|
|
|
|
"it": {"Mattina", "Pomeriggio", "Sera", "Notte"},
|
|
|
|
"is":{"Morgunn","Dagur", "Kvöld", "Nótt" },
|
|
|
|
"is": {"Morgunn", "Dagur", "Kvöld", "Nótt"},
|
|
|
|
"ja":{"朝", "昼", "夕", "夜" },
|
|
|
|
"ja": {"朝", "昼", "夕", "夜"},
|
|
|
|
"jv":{"Morning","Noon", "Evening", "Night" },
|
|
|
|
"jv": {"Morning", "Noon", "Evening", "Night"},
|
|
|
|
"ka":{"დილა", "დღე", "საღამო", "ღამე" },
|
|
|
|
"ka": {"დილა", "დღე", "საღამო", "ღამე"},
|
|
|
|
"kk":{"Таң", "Күндіз", "Кеш", "Түн" },
|
|
|
|
"kk": {"Таң", "Күндіз", "Кеш", "Түн"},
|
|
|
|
"ko":{"아침", "낮", "저녁", "밤" },
|
|
|
|
"ko": {"아침", "낮", "저녁", "밤"},
|
|
|
|
"ky":{"Эртең", "Күн", "Кеч", "Түн" },
|
|
|
|
"ky": {"Эртең", "Күн", "Кеч", "Түн"},
|
|
|
|
"lt":{"Rytas", "Diena", "Vakaras", "Naktis"},
|
|
|
|
"lt": {"Rytas", "Diena", "Vakaras", "Naktis"},
|
|
|
|
"lv":{"Rīts", "Diena", "Vakars", "Nakts" },
|
|
|
|
"lv": {"Rīts", "Diena", "Vakars", "Nakts"},
|
|
|
|
"mk":{"Утро", "Пладне", "Вечер", "Ноќ" },
|
|
|
|
"mk": {"Утро", "Пладне", "Вечер", "Ноќ"},
|
|
|
|
"ml":{ "മോണിംഗ്", "മധ്യാഹ്നം", "വൈകുന്നേരം", "രാത്രി",},
|
|
|
|
"ml": {"മോണിംഗ്", "മധ്യാഹ്നം", "വൈകുന്നേരം", "രാത്രി"},
|
|
|
|
"nl":{"'s Ochtends","'s Middags", "'s Avonds", "'s Nachts"},
|
|
|
|
"nl": {"'s Ochtends", "'s Middags", "'s Avonds", "'s Nachts"},
|
|
|
|
"nb":{"Morgen", "Middag", "Kveld", "Natt" },
|
|
|
|
"nb": {"Morgen", "Middag", "Kveld", "Natt"},
|
|
|
|
"nn":{"Morgon", "Middag", "Kveld", "Natt" },
|
|
|
|
"nn": {"Morgon", "Middag", "Kveld", "Natt"},
|
|
|
|
"pl":{"Ranek", "Dzień", "Wieczór", "Noc" },
|
|
|
|
"pl": {"Ranek", "Dzień", "Wieczór", "Noc"},
|
|
|
|
"pt":{"Manhã", "Meio-dia", "Tarde", "Noite" },
|
|
|
|
"pt": {"Manhã", "Meio-dia", "Tarde", "Noite"},
|
|
|
|
"pt-br":{"Manhã", "Meio-dia", "Tarde", "Noite" },
|
|
|
|
"pt-br": {"Manhã", "Meio-dia", "Tarde", "Noite"},
|
|
|
|
"ro":{"Dimineaţă","Amiază", "Seară", "Noapte"},
|
|
|
|
"ro": {"Dimineaţă", "Amiază", "Seară", "Noapte"},
|
|
|
|
"ru":{"Утро", "День", "Вечер", "Ночь" },
|
|
|
|
"ru": {"Утро", "День", "Вечер", "Ночь"},
|
|
|
|
"sk":{"Ráno", "Cez deň", "Večer", "V noci"},
|
|
|
|
"sk": {"Ráno", "Cez deň", "Večer", "V noci"},
|
|
|
|
"sl":{"Jutro", "Dan", "Večer", "Noč" },
|
|
|
|
"sl": {"Jutro", "Dan", "Večer", "Noč"},
|
|
|
|
"sr":{"Јутро", "Подне", "Вече", "Ноћ" },
|
|
|
|
"sr": {"Јутро", "Подне", "Вече", "Ноћ"},
|
|
|
|
"sr-lat":{"Jutro", "Podne", "Veče", "Noć" },
|
|
|
|
"sr-lat": {"Jutro", "Podne", "Veče", "Noć"},
|
|
|
|
"sv":{"Morgon", "Eftermiddag","Kväll", "Natt" },
|
|
|
|
"sv": {"Morgon", "Eftermiddag", "Kväll", "Natt"},
|
|
|
|
"sw":{"Asubuhi","Adhuhuri", "Jioni", "Usiku" },
|
|
|
|
"sw": {"Asubuhi", "Adhuhuri", "Jioni", "Usiku"},
|
|
|
|
"te":{"ఉదయం", "రోజు", "సాయంత్రం", "రాత్రి" },
|
|
|
|
"te": {"ఉదయం", "రోజు", "సాయంత్రం", "రాత్రి"},
|
|
|
|
"th":{"เช้า", "วัน", "เย็น", "คืน" },
|
|
|
|
"th": {"เช้า", "วัน", "เย็น", "คืน"},
|
|
|
|
"tr":{"Sabah", "Öğle", "Akşam", "Gece" },
|
|
|
|
"tr": {"Sabah", "Öğle", "Akşam", "Gece"},
|
|
|
|
"uk":{"Ранок", "День", "Вечір", "Ніч" },
|
|
|
|
"uk": {"Ранок", "День", "Вечір", "Ніч"},
|
|
|
|
"uz":{"Ertalab","Kunduzi", "Kechqurun","Kecha" },
|
|
|
|
"uz": {"Ertalab", "Kunduzi", "Kechqurun", "Kecha"},
|
|
|
|
"vi":{"Sáng", "Trưa", "Chiều", "Tối" },
|
|
|
|
"vi": {"Sáng", "Trưa", "Chiều", "Tối"},
|
|
|
|
"zh": {"早上", "中午", "傍晚", "夜间" },
|
|
|
|
"zh": {"早上", "中午", "傍晚", "夜间"},
|
|
|
|
"zh-cn":{"早上", "中午", "傍晚", "夜间" },
|
|
|
|
"zh-cn": {"早上", "中午", "傍晚", "夜间"},
|
|
|
|
"zh-tw":{"早上", "中午", "傍晚", "夜間" },
|
|
|
|
"zh-tw": {"早上", "中午", "傍晚", "夜間"},
|
|
|
|
"zu":{"Morning","Noon", "Evening", "Night" },
|
|
|
|
"zu": {"Morning", "Noon", "Evening", "Night"},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
@ -799,7 +799,7 @@ func formatCond(cur []string, c cond, current bool) (ret []string) {
|
|
|
|
if config.RightToLeft {
|
|
|
|
if config.RightToLeft {
|
|
|
|
desc = c.WeatherDesc[0].Value
|
|
|
|
desc = c.WeatherDesc[0].Value
|
|
|
|
if runewidth.StringWidth(desc) < 15 {
|
|
|
|
if runewidth.StringWidth(desc) < 15 {
|
|
|
|
desc = strings.Repeat(" ", 15 - runewidth.StringWidth(desc)) + desc
|
|
|
|
desc = strings.Repeat(" ", 15-runewidth.StringWidth(desc)) + desc
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
desc = c.WeatherDesc[0].Value
|
|
|
|
desc = c.WeatherDesc[0].Value
|
|
|
@ -822,7 +822,7 @@ func formatCond(cur []string, c cond, current bool) (ret []string) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (config.RightToLeft) {
|
|
|
|
if config.RightToLeft {
|
|
|
|
ret = append(ret, fmt.Sprintf("%v %v %v", cur[0], desc, icon[0]))
|
|
|
|
ret = append(ret, fmt.Sprintf("%v %v %v", cur[0], desc, icon[0]))
|
|
|
|
ret = append(ret, fmt.Sprintf("%v %v %v", cur[1], formatTemp(c), icon[1]))
|
|
|
|
ret = append(ret, fmt.Sprintf("%v %v %v", cur[1], formatTemp(c), icon[1]))
|
|
|
|
ret = append(ret, fmt.Sprintf("%v %v %v", cur[2], formatWind(c), icon[2]))
|
|
|
|
ret = append(ret, fmt.Sprintf("%v %v %v", cur[2], formatWind(c), icon[2]))
|
|
|
@ -887,7 +887,7 @@ func printDay(w weather) (ret []string) {
|
|
|
|
for i, s := range slots {
|
|
|
|
for i, s := range slots {
|
|
|
|
if config.Narrow {
|
|
|
|
if config.Narrow {
|
|
|
|
if i == 0 || i == 2 {
|
|
|
|
if i == 0 || i == 2 {
|
|
|
|
continue;
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ret = formatCond(ret, s, false)
|
|
|
|
ret = formatCond(ret, s, false)
|
|
|
@ -937,10 +937,10 @@ func printDay(w weather) (ret []string) {
|
|
|
|
if t, ok := daytimeTranslation[config.Lang]; ok {
|
|
|
|
if t, ok := daytimeTranslation[config.Lang]; ok {
|
|
|
|
trans = t
|
|
|
|
trans = t
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (config.Narrow) {
|
|
|
|
if config.Narrow {
|
|
|
|
|
|
|
|
|
|
|
|
names := "│ "+ justifyCenter(trans[1], 16) +
|
|
|
|
names := "│ " + justifyCenter(trans[1], 16) +
|
|
|
|
"└──────┬──────┘" +justifyCenter(trans[3], 16) + " │"
|
|
|
|
"└──────┬──────┘" + justifyCenter(trans[3], 16) + " │"
|
|
|
|
|
|
|
|
|
|
|
|
ret = append([]string{
|
|
|
|
ret = append([]string{
|
|
|
|
" ┌─────────────┐ ",
|
|
|
|
" ┌─────────────┐ ",
|
|
|
@ -956,11 +956,11 @@ func printDay(w weather) (ret []string) {
|
|
|
|
|
|
|
|
|
|
|
|
names := ""
|
|
|
|
names := ""
|
|
|
|
if config.RightToLeft {
|
|
|
|
if config.RightToLeft {
|
|
|
|
names = "│"+ justifyCenter(trans[3], 29) + "│ "+ justifyCenter(trans[2], 16) +
|
|
|
|
names = "│" + justifyCenter(trans[3], 29) + "│ " + justifyCenter(trans[2], 16) +
|
|
|
|
"└──────┬──────┘" +justifyCenter(trans[1], 16) + " │"+justifyCenter(trans[0], 29)+"│"
|
|
|
|
"└──────┬──────┘" + justifyCenter(trans[1], 16) + " │" + justifyCenter(trans[0], 29) + "│"
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
names = "│"+ justifyCenter(trans[0], 29) + "│ "+ justifyCenter(trans[1], 16) +
|
|
|
|
names = "│" + justifyCenter(trans[0], 29) + "│ " + justifyCenter(trans[1], 16) +
|
|
|
|
"└──────┬──────┘" +justifyCenter(trans[2], 16) + " │"+justifyCenter(trans[3], 29)+"│"
|
|
|
|
"└──────┬──────┘" + justifyCenter(trans[2], 16) + " │" + justifyCenter(trans[3], 29) + "│"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ret = append([]string{
|
|
|
|
ret = append([]string{
|
|
|
@ -1153,9 +1153,9 @@ func main() {
|
|
|
|
// r.Data.Req[0].Type,
|
|
|
|
// r.Data.Req[0].Type,
|
|
|
|
fmt.Printf("Weather report: %s\n\n", locationName)
|
|
|
|
fmt.Printf("Weather report: %s\n\n", locationName)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
if (config.RightToLeft) {
|
|
|
|
if config.RightToLeft {
|
|
|
|
caption = locationName + " " + caption
|
|
|
|
caption = locationName + " " + caption
|
|
|
|
space := strings.Repeat(" ", 125 - runewidth.StringWidth(caption))
|
|
|
|
space := strings.Repeat(" ", 125-runewidth.StringWidth(caption))
|
|
|
|
fmt.Printf("%s%s\n\n", space, caption)
|
|
|
|
fmt.Printf("%s%s\n\n", space, caption)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
fmt.Printf("%s %s\n\n", caption, locationName)
|
|
|
|
fmt.Printf("%s %s\n\n", caption, locationName)
|
|
|
|