Multilanguage support for /ciclopi command (work in progress)

This commit is contained in:
Davte 2019-08-15 22:15:05 +02:00
parent 438a88d92d
commit dc660de57f

View File

@ -25,6 +25,49 @@ default_ciclopi_messages = {
'en': "CicloPi 🚲",
'it': "CicloPi 🚲"
},
'updating': {
'en': "Updating",
'it': "Aggiornamento in corso",
},
'unavailable_website': {
'en': "CicloPi's website cannot be reached at the moment.\n"
"Please retry later :/",
'it': "Il sito del CicloPi è momentaneamente irraggiungibile.\n"
"Riprova tra un po' :/"
},
'no_station_available': {
'en': "No station available",
'it': "Nessuna stazione"
},
'title': {
'en': "CicloPi stations",
'it': "Stazioni CicloPi"
},
'buttons': {
'all': {
'en': "All",
'it': "Tutte"
},
'only_fav': {
'en': "Favourites only",
'it': "Solo preferite"
},
'first_n': {
'en': "First {n}",
'it': "Prime {n}"
},
'update': {
'en': "🔄 Update",
'it': "🔄 Aggiorna"
},
'legend': {
'en': "📜 Legend",
'it': "📜 Legenda"
},
'settings': {
'en': "⚙️ Settings",
'it': "⚙️ Impostazioni"
},
}
},
'settings': {
@ -154,6 +197,18 @@ default_ciclopi_messages = {
'en': "Only favourite stations",
'it': "Solo le preferite"
},
'all': {
'en': "favourite stations first",
'it': "prima le preferite"
},
'only': {
'en': "only favourite stations",
'it': "solo le preferite"
}
},
'num': {
'en': "first {n}",
'it': "prime {n}"
},
'all': {
'name': {
@ -185,6 +240,7 @@ default_ciclopi_messages = {
'en': "Not available",
'it': "Non disponibile"
}
},
'set_position': {
'success': {
'en': "Position set!\n"
@ -205,6 +261,20 @@ default_ciclopi_messages = {
"Per riprovare fai "
"/ciclopi > Impostazioni > Cambia posizione"
}
},
'button': {
'title': {
'en': "CicloPi Settings",
'it': "Impostazioni CicloPi"
},
'back_to_settings': {
'en': "Back to settings",
'it': "Torna alle impostazioni"
},
'back_to_stations': {
'en': "Back to stations",
'it': "Torna alle stazioni"
}
}
}
@ -769,15 +839,20 @@ async def _ciclopi_command(bot, update, user_record, sent_message=None,
else:
await bot.edit_message_text(
update=sent_message,
text="<i>Aggiornamento in corso...</i>",
text="<i>{message}...</i>".format(
message=bot.get_message(
'ciclopi', 'command', 'updating',
update=update, user_record=user_record
)
),
parse_mode='HTML',
reply_markup=None
)
ciclopi_data = await ciclopi_webpage.get_page()
if ciclopi_data is None or isinstance(ciclopi_data, Exception):
text = (
"Il sito del CicloPi è momentaneamente irraggiungibile, "
"riprova tra un po' :/"
text = bot.get_message(
'ciclopi', 'command', 'unavailable_website',
update=update, user_record=user_record
)
else:
with bot.db as db:
@ -861,13 +936,41 @@ async def _ciclopi_command(bot, update, user_record, sent_message=None,
and not show_all
):
stations = stations[:stations_to_show]
filter_label = ""
if stations_to_show == -1:
filter_label = bot.get_message(
'ciclopi', 'filters', 'fav', 'all' if show_all else 'only',
update=update, user_record=user_record
)
elif len(stations) < len(Station.stations):
filter_label = bot.get_message(
'ciclopi', 'filters', 'num',
update=update, user_record=user_record,
n=stations_to_show
)
if filter_label:
filter_label = ' ({label})'.format(
label=filter_label
)
text = (
"🚲 Stazioni ciclopi {order}"
"{lim} {sort[symbol]}\n"
"🚲 {title} {order}"
"{filter} {sort[symbol]}\n"
"\n"
"{s}"
"{stations_list}"
).format(
s=(
title=bot.get_message(
'ciclopi', 'command', 'title',
update=update, user_record=user_record
),
sort=CICLOPI_SORTING_CHOICES[sorting_code],
order=bot.get_message(
'ciclopi', 'sorting',
CICLOPI_SORTING_CHOICES[sorting_code]['id'],
'short_description',
update=update, user_record=user_record
),
filter=filter_label,
stations_list=(
'\n\n'.join(
station.status.format(
not_available=bot.get_message(
@ -877,25 +980,13 @@ async def _ciclopi_command(bot, update, user_record, sent_message=None,
)
for station in stations
) if len(stations)
else "<i>- Nessuna stazione -</i>"
),
sort=CICLOPI_SORTING_CHOICES[sorting_code],
order=bot.get_message(
'ciclopi', 'sorting',
CICLOPI_SORTING_CHOICES[sorting_code]['id'],
'short_description',
update=update, user_record=user_record
),
lim=(
" ({adv} le preferite)".format(
adv='prima' if show_all else 'solo'
) if stations_to_show == -1
else " (prime {n})".format(
n=stations_to_show
else "<i>- {message} -</i>".format(
message=bot.get_message(
'ciclopi', 'command', 'no_station_available',
update=update, user_record=user_record
)
)
if len(stations) < len(Station.stations)
else ""
)
),
)
if not text:
return
@ -903,19 +994,29 @@ async def _ciclopi_command(bot, update, user_record, sent_message=None,
(
[
make_button(
"💯 Tutte",
text="💯 {message}".format(
message=bot.get_message(
'ciclopi', 'command', 'buttons', 'all',
update=update, user_record=user_record
)
),
prefix='ciclopi:///',
data=['show', 'all']
)
] if len(stations) < len(Station.stations)
else [
make_button(
"{sy} {t}".format(
t=(
"Solo preferite" if stations_to_show == -1
else "Prime {n}"
).format(
"{sy} {message}".format(
message=(
bot.get_message(
'ciclopi', 'command', 'buttons', 'only_fav',
update=update, user_record=user_record
) if stations_to_show == -1
else bot.get_message(
'ciclopi', 'command', 'buttons', 'first_n',
update=update, user_record=user_record,
n=stations_to_show
)
),
sy=CICLOPI_STATIONS_TO_SHOW[stations_to_show]['symbol']
),
@ -926,7 +1027,10 @@ async def _ciclopi_command(bot, update, user_record, sent_message=None,
else []
) + [
make_button(
"🔄 Aggiorna",
text=bot.get_message(
'ciclopi', 'command', 'buttons', 'update',
update=update, user_record=user_record
),
prefix='ciclopi:///',
data=(
['show'] + (
@ -936,12 +1040,18 @@ async def _ciclopi_command(bot, update, user_record, sent_message=None,
)
),
make_button(
"📜 Legenda",
text=bot.get_message(
'ciclopi', 'command', 'buttons', 'legend',
update=update, user_record=user_record
),
prefix='ciclopi:///',
data=['legend']
),
make_button(
"⚙️ Impostazioni",
text=bot.get_message(
'ciclopi', 'command', 'buttons', 'settings',
update=update, user_record=user_record
),
prefix='ciclopi:///',
data=['main']
)
@ -963,14 +1073,55 @@ async def _ciclopi_command(bot, update, user_record, sent_message=None,
return
def get_menu_back_buttons(bot, update, user_record,
include_back_to_settings=True):
"""Return a list of menu buttons to navigate back in the menu.
`include_back_to_settings` : Bool
Set it to True to include a 'back to settings' menu button.
"""
if include_back_to_settings:
buttons = [
make_button(
text="⚙️ {message}".format(
message=bot.get_message(
'ciclopi', 'button', 'back_to_settings',
update=update, user_record=user_record
)
),
prefix='ciclopi:///',
data=['main']
)
]
else:
buttons = []
buttons += [
make_button(
text="🚲 {message}".format(
message=bot.get_message(
'ciclopi', 'button', 'back_to_stations',
update=update, user_record=user_record
)
),
prefix='ciclopi:///',
data=['show']
)
]
return buttons
async def _ciclopi_button_main(bot, update, user_record, arguments):
result, text, reply_markup = '', '', None
text = (
"⚙️ Impostazioni CicloPi 🚲\n"
"⚙️ {settings_title} 🚲\n"
"\n"
"{c}"
"{settings_list}"
).format(
c='\n'.join(
settings_title=bot.get_message(
'ciclopi', 'button', 'title',
update=update, user_record=user_record
),
settings_list='\n'.join(
"- {symbol} {name}: {description}".format(
symbol=bot.get_message(
'ciclopi', 'settings', setting, 'symbol',
@ -1005,13 +1156,10 @@ async def _ciclopi_button_main(bot, update, user_record, arguments):
data=[setting]
)
for setting in bot.messages['ciclopi']['settings']
] + [
make_button(
text="🚲 Torna alle stazioni",
prefix='ciclopi:///',
data=['show']
)
]
] + get_menu_back_buttons(
bot=bot, update=update, user_record=user_record,
include_back_to_settings=False
)
)
return result, text, reply_markup
@ -1091,18 +1239,10 @@ async def _ciclopi_button_sort(bot, update, user_record, arguments):
data=['sort', code]
)
for code, choice in CICLOPI_SORTING_CHOICES.items()
] + [
make_button(
text="⚙️ Torna alle impostazioni",
prefix='ciclopi:///',
data=['main']
),
make_button(
text="🚲 Torna alle stazioni",
prefix='ciclopi:///',
data=['show']
)
]
] + get_menu_back_buttons(
bot=bot, update=update, user_record=user_record,
include_back_to_settings=True
)
)
return result, text, reply_markup
@ -1179,18 +1319,10 @@ async def _ciclopi_button_limit(bot, update, user_record, arguments):
data=['limit', code]
)
for code, choice in CICLOPI_STATIONS_TO_SHOW.items()
] + [
make_button(
text="⚙️ Torna alle impostazioni",
prefix='ciclopi:///',
data=['main']
),
make_button(
text="🚲 Torna alle stazioni",
prefix='ciclopi:///',
data=['show']
)
]
] + get_menu_back_buttons(
bot=bot, update=update, user_record=user_record,
include_back_to_settings=True
)
)
return result, text, reply_markup
@ -1229,18 +1361,10 @@ async def _ciclopi_button_legend(bot, update, user_record, arguments):
}
)
reply_markup = make_inline_keyboard(
[
make_button(
text="⚙️ Torna alle impostazioni",
prefix='ciclopi:///',
data=['main']
),
make_button(
text="🚲 Torna alle stazioni",
prefix='ciclopi:///',
data=['show']
)
]
+ get_menu_back_buttons(
bot=bot, update=update, user_record=user_record,
include_back_to_settings=True
)
)
return result, text, reply_markup
@ -1344,18 +1468,11 @@ async def _ciclopi_button_favorites_add(bot, update, user_record, arguments,
text="🔃 Riordina",
prefix="ciclopi:///",
data=["fav"]
),
make_button(
text="⚙️ Torna alle impostazioni",
prefix='ciclopi:///',
data=['main']
),
make_button(
text="🚲 Torna alle stazioni",
prefix='ciclopi:///',
data=['show']
)
],
] + get_menu_back_buttons(
bot=bot, update=update, user_record=user_record,
include_back_to_settings=True
),
3
)
)