Sat, 10 Jun 2017 17:00:53 +0300
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
service.py | file | annotate | diff | comparison | revisions |
--- a/service.py Sat Jun 10 16:48:15 2017 +0300 +++ b/service.py Sat Jun 10 17:00:53 2017 +0300 @@ -1,41 +1,48 @@ #!/usr/bin/env python3 from flask import Flask, render_template, abort from datetime import datetime, date, time, timedelta +from os import path, listdir +from configparser import ConfigParser +import locale + from misc import * -import locale from busroute import supista_reitti -from configparser import ConfigParser -from os import path app = Flask(__name__) + +# Varmista ettei järjestelmän kieliasetukset sotke muotoiluja locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()) -kielet = ['fi', 'sv', 'en', 'ru'] -kieli_ini = {} -for kieli in kielet: - ini = ConfigParser() - ini.read(path.join('tr', kieli + '.ini')) - kieli_ini[kieli] = ini +# Lataa käännökset +class Translator: + def __init__(self): + self.languages = {} + def load_language(self, file_path): + language_name = path.splitext(path.basename(file_path))[0] + ini = ConfigParser() + ini.read(path.join(file_path)) + self.languages[language_name] = ini + def __call__(self, name, section, language = None): + language = language or language_for_page() + try: + return self.languages[language][section][name] + except KeyError: + return name -def käännä(nimi, osio): - kieli = sivun_kieli() - try: - return kieli_ini[kieli][osio][nimi] - except KeyError: - return nimi +tr = Translator() +for file in listdir('tr'): + tr.load_language(path.join('tr', file)) -def sivun_kieli(): +def language_for_page(): from flask import request - if request.args.get('sv') is not None: - return 'sv' - elif request.args.get('en') is not None: - return 'en' - elif request.args.get('ru') is not None: - return 'ru' - elif request.args.get('kääntämätön') is None: - return 'fi' + if request.args.get('kääntämätön') is not None: + return None else: - return None + for language_name in tr.languages: + if request.args.get(language_name) is not None: + return language_name + else: + return None @app.route('/pysäkki/<tunniste>') def pysäkkiaikataulu(tunniste): @@ -48,7 +55,7 @@ abort(404) for (aika, pysähdys) in pysäkki.aikataulu(100): kyltti = supista_reitti(pysähdys.ajo.suppea_reitti(pysähdys)) - kyltti = [käännä(paikka, 'paikat') for paikka in kyltti] + kyltti = [tr(paikka, 'paikat') for paikka in kyltti] kylttiesitys = ' - '.join(kyltti) if len(kylttiesitys) > 25: k = ceil(len(kyltti) / 2) @@ -64,7 +71,7 @@ 'pysäkki.html', aikataulu = aikataulu, viite = tunniste, - nimi = käännä(pysäkki.nimi, 'pysäkit'), + nimi = tr(pysäkki.nimi, 'pysäkit'), linkki_karttaan = pysäkki.linkki_karttaan, alue = pysäkki.alue, sijainti = pysäkki.sijainti, @@ -88,8 +95,8 @@ reitti.append({ 'aika': muotoiltu_aika, 'tunniste': pysähdys.pysäkki.tunniste, - 'alue': käännä(pysähdys.pysäkki.alue or '', 'paikat'), - 'nimi': käännä(pysähdys.pysäkki.nimi, 'pysäkit'), + 'alue': tr(pysähdys.pysäkki.alue or '', 'paikat'), + 'nimi': tr(pysähdys.pysäkki.nimi, 'pysäkit'), }) alue = pysähdys.pysäkki.alue if alue: @@ -103,7 +110,7 @@ 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(käännä(paikka, 'paikat') for paikka in kyltti), + selite = ' - '.join(tr(paikka, 'paikat') for paikka in kyltti), yö = yö(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika), ) @@ -111,5 +118,6 @@ from argparse import ArgumentParser parser = ArgumentParser() parser.add_argument('-p', '--port', type = int, default = 5000) + parser.add_argument('-d', '--debug', action = 'store_true') args = parser.parse_args() - app.run(debug = True, port = args.port) + app.run(debug = args.debug, port = args.port)