service.py

changeset 20
3199e289ae62
parent 19
16fa9fb20b32
child 21
6a0394d5a159
--- a/service.py	Sat Jun 10 22:30:55 2017 +0300
+++ b/service.py	Sun Jun 11 01:28:25 2017 +0300
@@ -11,7 +11,19 @@
 app = Flask(__name__)
 
 # Varmista ettei järjestelmän kieliasetukset sotke muotoiluja
-locale.setlocale(locale.LC_ALL, locale.getdefaultlocale())
+def reset_locale():
+	locale.setlocale(locale.LC_ALL, locale.getdefaultlocale())
+
+def activate_locale(language = None):
+	language = language or language_for_page()
+	class result:
+		def __enter__(self):
+			locale.setlocale(locale.LC_ALL, tr('locale', 'other', language = language))
+		def __exit__(self, *args):
+			reset_locale()
+	return result()
+
+reset_locale()
 
 # Lataa käännökset
 class Translator:
@@ -77,9 +89,25 @@
 		linkki_karttaan = pysäkki.sijainti.link_to_map,
 		alue = pysäkki.alue,
 		sijainti = pysäkki.sijainti,
-		cluster = pysäkki.cluster.name,
+		cluster = pysäkki.cluster.name if len(pysäkki.cluster.stops) > 1 else None,
+		tr = tr,
 	)
 
+def time_representation(aika, suhteellinen = True):
+	erotus = aika - nyt()
+	if suhteellinen and erotus < timedelta(minutes = 1):
+		return tr('right-now', 'misc-text')
+	elif suhteellinen and erotus < timedelta(minutes = 10):
+		return '%dm' % round(erotus.seconds / 60)
+	elif aika.date() == tänään():
+		return '%d:%02d' % (aika.hour, aika.minute)
+	elif erotus < timedelta(7):
+		with activate_locale():
+			return aika.strftime('%-a %H:%M')
+	else:
+		with activate_locale():
+			return aika.strftime('%-d.%-m. %H:%M')
+
 @app.route('/pysäkkiryhmä/<cluster_name>')
 def cluster_schedule(cluster_name):
 	from buses import pysäkit, clusters_by_name
@@ -110,7 +138,8 @@
 				'name': tr(stop.nimi, 'pysäkit'),
 			} for stop in cluster.stops),
 			key = lambda stop: (len(stop['id']), stop['id'])
-		)
+		),
+		tr = tr,
 	)
 
 @app.route('/ajovuoro/<numero>')
@@ -145,13 +174,14 @@
 	kyltti = supista_reitti([k['alue'] for k in suppea_reitti], kokonainen = True)
 	sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html'
 	return render_template(sivu,
-						reitti = reitti,
-						suppea_reitti = suppea_reitti,
-						numero = numero,
-						linja = ajovuoro.linja.viite,
-						selite = ' - '.join(tr(paikka, 'paikat') for paikka in kyltti),
-						yö = time_representation(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika),
-						)
+		reitti = reitti,
+		suppea_reitti = suppea_reitti,
+		numero = numero,
+		linja = ajovuoro.linja.viite,
+		selite = ' - '.join(tr(paikka, 'paikat') for paikka in kyltti),
+		yö = is_night_time(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika),
+		tr = tr,
+		)
 
 @app.route('/static/<path:path>')
 def static_file(path):

mercurial