Sat, 10 Jun 2017 21:09:11 +0300
Lisää käännöstä
0 | 1 | #!/usr/bin/env python3 |
11
e18ad36fbbf5
Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents:
10
diff
changeset
|
2 | from flask import Flask, render_template, abort, send_from_directory |
0 | 3 | from datetime import datetime, date, time, timedelta |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
4 | from os import path, listdir |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
5 | from configparser import ConfigParser |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
6 | import locale |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
7 | |
4 | 8 | from misc import * |
7
f3791dccfd03
Käännetty tiedostojen nimet englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
5
diff
changeset
|
9 | from busroute import supista_reitti |
0 | 10 | |
11 | app = Flask(__name__) | |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
12 | |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
13 | # Varmista ettei järjestelmän kieliasetukset sotke muotoiluja |
0 | 14 | locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()) |
15 | ||
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
16 | # Lataa käännökset |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
17 | class Translator: |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
18 | def __init__(self): |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
19 | self.languages = {} |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
20 | def load_language(self, file_path): |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
21 | language_name = path.splitext(path.basename(file_path))[0] |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
22 | ini = ConfigParser() |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
23 | ini.read(path.join(file_path)) |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
24 | self.languages[language_name] = ini |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
25 | def __call__(self, name, section, language = None): |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
26 | language = language or language_for_page() |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
27 | try: |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
28 | return self.languages[language][section][name] |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
29 | except KeyError: |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
30 | return name |
5 | 31 | |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
32 | tr = Translator() |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
33 | for file in listdir('tr'): |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
34 | tr.load_language(path.join('tr', file)) |
5 | 35 | |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
36 | def language_for_page(): |
5 | 37 | from flask import request |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
38 | if request.args.get('kääntämätön') is not None: |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
39 | return None |
5 | 40 | else: |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
41 | for language_name in tr.languages: |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
42 | if request.args.get(language_name) is not None: |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
43 | return language_name |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
44 | else: |
11
e18ad36fbbf5
Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents:
10
diff
changeset
|
45 | return 'fi' |
5 | 46 | |
0 | 47 | @app.route('/pysäkki/<tunniste>') |
48 | def pysäkkiaikataulu(tunniste): | |
7
f3791dccfd03
Käännetty tiedostojen nimet englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
5
diff
changeset
|
49 | from buses import pysäkit |
5 | 50 | from math import ceil |
0 | 51 | aikataulu = [] |
3 | 52 | try: |
53 | pysäkki = pysäkit[tunniste] | |
54 | except KeyError: | |
55 | abort(404) | |
18 | 56 | for schedule_entry in pysäkki.schedule(100): |
57 | sign = supista_reitti(schedule_entry['trip'].suppea_reitti(schedule_entry['stop'])) | |
58 | sign = [tr(paikka, 'paikat') for paikka in sign] | |
59 | sign_representation = ' - '.join(sign) | |
60 | if len(sign_representation) > 25: | |
61 | k = ceil(len(sign) / 2) | |
62 | sign_representation = ' - '.join(sign[:k]) + '\n' + ' - '.join(sign[k:]) | |
0 | 63 | aikataulu.append({ |
18 | 64 | 'aika': time_representation(schedule_entry['time']), |
65 | 'linja': schedule_entry['trip'].linja.viite, | |
66 | 'kyltti': sign_representation, | |
67 | 'ajovuoro': schedule_entry['stop'].ajo.nimi, | |
68 | 'yö': is_night_time(schedule_entry['time']), | |
0 | 69 | }) |
5 | 70 | return render_template( |
71 | 'pysäkki.html', | |
72 | aikataulu = aikataulu, | |
73 | viite = tunniste, | |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
74 | nimi = tr(pysäkki.nimi, 'pysäkit'), |
5 | 75 | linkki_karttaan = pysäkki.linkki_karttaan, |
76 | alue = pysäkki.alue, | |
77 | sijainti = pysäkki.sijainti, | |
78 | ) | |
0 | 79 | |
4 | 80 | @app.route('/ajovuoro/<numero>') |
0 | 81 | def ajoreitti(numero): |
2 | 82 | from flask import request |
7
f3791dccfd03
Käännetty tiedostojen nimet englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
5
diff
changeset
|
83 | from buses import ajot |
3 | 84 | try: |
85 | ajovuoro = ajot[numero] | |
86 | except KeyError: | |
87 | abort(404) | |
2 | 88 | suppea = request.args.get('suppea') is not None |
0 | 89 | reitti = [] |
2 | 90 | suppea_reitti = [] |
91 | käydyt_alueet = set() | |
0 | 92 | for pysähdys in ajovuoro.reitti: |
4 | 93 | aika = datetime.combine(tänään(), time()) + pysähdys.saapumisaika |
18 | 94 | muotoiltu_aika = time_representation(aika) |
0 | 95 | reitti.append({ |
2 | 96 | 'aika': muotoiltu_aika, |
0 | 97 | 'tunniste': pysähdys.pysäkki.tunniste, |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
98 | 'alue': tr(pysähdys.pysäkki.alue or '', 'paikat'), |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
99 | 'nimi': tr(pysähdys.pysäkki.nimi, 'pysäkit'), |
0 | 100 | }) |
2 | 101 | alue = pysähdys.pysäkki.alue |
102 | if alue: | |
103 | if alue not in käydyt_alueet: | |
104 | suppea_reitti.append({ | |
105 | 'aika': muotoiltu_aika, | |
5 | 106 | 'alue': alue, |
2 | 107 | }) |
108 | käydyt_alueet.add(alue) | |
5 | 109 | kyltti = supista_reitti([k['alue'] for k in suppea_reitti], kokonainen = True) |
2 | 110 | sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html' |
18 | 111 | return render_template(sivu, |
112 | reitti = reitti, | |
113 | suppea_reitti = suppea_reitti, | |
114 | numero = numero, | |
115 | linja = ajovuoro.linja.viite, | |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
116 | selite = ' - '.join(tr(paikka, 'paikat') for paikka in kyltti), |
18 | 117 | yö = time_representation(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika), |
5 | 118 | ) |
0 | 119 | |
11
e18ad36fbbf5
Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents:
10
diff
changeset
|
120 | @app.route('/static/<path:path>') |
e18ad36fbbf5
Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents:
10
diff
changeset
|
121 | def static_file(path): |
e18ad36fbbf5
Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents:
10
diff
changeset
|
122 | return send_from_directory(path.join('static', path)) |
e18ad36fbbf5
Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents:
10
diff
changeset
|
123 | |
0 | 124 | if __name__ == '__main__': |
2 | 125 | from argparse import ArgumentParser |
126 | parser = ArgumentParser() | |
127 | parser.add_argument('-p', '--port', type = int, default = 5000) | |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
128 | parser.add_argument('-d', '--debug', action = 'store_true') |
2 | 129 | args = parser.parse_args() |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
130 | app.run(debug = args.debug, port = args.port) |