changeset 0:371db48edc2b

Add main and subscribe page
author Cédric Krier <ced@b2ck.com>
date Tue, 30 Jan 2018 17:35:56 +0100
parents
children 90f1c2ee259d
files babel.cfg educode/__init__.py educode/index.py educode/static/Inconsolata.otf educode/static/educode.css educode/static/logo.svg educode/subscribe.py educode/templates/index.html educode/templates/layout.html educode/templates/subscribe.html educode/translations/en/LC_MESSAGES/messages.po educode/translations/fr/LC_MESSAGES/messages.po educode/translations/messages.pot educode/translations/nl/LC_MESSAGES/messages.po requirements.txt runserver.py
diffstat 16 files changed, 1309 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/babel.cfg	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,3 @@
+[python: **.py]
+[jinja2: **/templates/*.html]
+extensions = jinja2.ext.autoescape,jinja2.ext.with_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/__init__.py	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,85 @@
+import logging
+import logging.config
+import os
+from http import HTTPStatus
+
+from flask import Flask, g, request, abort, url_for
+from flask_babel import Babel, get_locale
+from flask_bootstrap import Bootstrap
+from flask_tryton import Tryton
+from flask_wtf.csrf import CSRFProtect
+from werkzeug.routing import RequestRedirect, MethodNotAllowed, NotFound
+
+app = Flask(__name__, static_folder='static')
+app.config.from_envvar('EDUCODE_CONFIG')
+
+if os.environ.get('EDUCODE_LOGGING'):
+    logging.config.fileConfig(os.environ['EDUCODE_LOGGING'])
+    logging.getLogger(__name__).info(
+        "using %s as logging configuration file",
+        os.environ['EDUCODE_LOGGING'])
+    app.logger.propagate = True
+
+csrf = CSRFProtect(app)
+babel = Babel(app)
+Bootstrap(app)
+tryton = Tryton(app)
+
+
+@babel.localeselector
+def localeselector():
+    translations = [str(t) for t in babel.list_translations()]
+    if g.get('lang_code'):
+        if g.lang_code not in translations:
+            abort(HTTPStatus.NOT_FOUND)
+        return g.lang_code
+    return request.accept_languages.best_match(translations)
+
+
+@app.url_defaults
+def add_language_code(endpoint, values):
+    if 'lang_code' in values:
+        return
+    if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'):
+        values.setdefault('lang_code', str(get_locale()))
+
+
+@app.url_value_preprocessor
+def pull_lang_code(endpoint, values):
+    if values is None:
+        values = {}
+    g.lang_code = values.pop('lang_code', None)
+
+
+def get_endpoint_arguments(host, path, method='GET'):
+    "Match a request and return the endpoint and arguments."
+    adapter = app.url_map.bind(host)
+    try:
+        return adapter.match(path, method=method)
+    except RequestRedirect as e:
+        return get_endpoint_arguments(e.new_url, method)
+    except (MethodNotAllowed, NotFound):
+        return None
+
+
+@app.context_processor
+def inject_babel():
+    def url_lang(lang_code):
+        match = get_endpoint_arguments(
+            request.host, request.path, request.method)
+        if match:
+            endpoint = match[0]
+            args = dict(request.args)
+            args.update(match[1])
+            args['lang_code'] = lang_code
+            return url_for(endpoint, **args)
+        else:
+            return request.url
+    return {
+        'get_locale': get_locale,
+        'list_translations': babel.list_translations,
+        'url_lang': url_lang,
+        }
+
+from . import index  # noqa: F401
+from . import subscribe  # noqa: F401
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/index.py	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,9 @@
+from flask import render_template
+
+from . import app
+
+
+@app.route('/')
+@app.route('/<lang_code>/')
+def index():
+    return render_template('index.html')
Binary file educode/static/Inconsolata.otf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/static/educode.css	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,69 @@
+/* Define font */
+@font-face {
+    font-family: Inconsolata;
+    src: url("/static/Inconsolata.otf") format("opentype");
+}
+
+/* Space out content a bit */
+body {
+    padding-top: 20px;
+    padding-bottom: 20px;
+}
+
+/* Custom page header */
+.header {
+    padding-bottom: 20px;
+    border-bottom: 1px solid #003399;
+    margin-bottom: 30px;
+}
+/* Make the masthead heading the same height as the navigation */
+.header h3 {
+    margin-top: 0;
+    margin-bottom: 0;
+    line-height: 40px;
+}
+
+/* Customize container */
+@media (min-width: 768px) {
+    .container {
+        max-width: 730px;
+    }
+}
+
+/* Color all headers */
+h1, h2, h3, h4, h5, h6 {
+    color: #ffcc00;
+    font-family: Inconsolata;
+}
+
+/* Color links */
+a {
+    color: #003399;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:focus,
+.nav-pills > li.active > a:hover {
+    background-color: #003399;
+}
+
+.btn-primary {
+    background-color: #003399;
+    border-color: #002989;
+}
+.btn-primary:hover,
+.btn-primary:active,
+.btn-primary:focus {
+    background-color: #001380;
+    border-color: #001370;
+}
+
+/* Center jumbotron */
+.jumbotron {
+    text-align: center;
+}
+
+.form-subscribe {
+    max-width: 330px;
+    padding: 15px;
+    margin: 0 auto;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/static/logo.svg	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="164 51 477 413" width="477pt" height="413pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.6.2 <dc:date>2018-01-28 19:43:51 +0000</dc:date></metadata><defs><font-face font-family="Futura" font-size="53" panose-1="2 11 8 2 2 2 4 2 2 4" units-per-em="1000" underline-position="-75" underline-thickness="50" slope="0" x-height="513" cap-height="754" ascent="1039.00146" descent="-259.9945" font-weight="bold"><font-face-src><font-face-name name="Futura-Bold"/></font-face-src></font-face><font-face font-family="Consolas" font-size="31" panose-1="2 11 6 9 2 2 4 3 2 4" units-per-em="1000" underline-position="-129.88281" underline-thickness="70.3125" slope="0" x-height="490.23438" cap-height="638.1836" ascent="742.6758" descent="-257.32422" font-weight="500"><font-face-src><font-face-name name="Consolas"/></font-face-src></font-face><font-face font-family="Consolas" font-size="30" panose-1="2 11 6 9 2 2 4 3 2 4" units-per-em="1000" underline-position="-129.88281" underline-thickness="70.3125" slope="0" x-height="490.23438" cap-height="638.1836" ascent="742.6758" descent="-257.32422" font-weight="500"><font-face-src><font-face-name name="Consolas"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><rect x="164.40945" y="51.023622" width="476.22047" height="408.18897" fill="#039"/><text transform="translate(503.3502 251.06693) rotate(-90)" fill="#fc0"><tspan font-family="Futura" font-size="53" font-weight="bold" fill="#fc0" x=".335" y="55" textLength="72.08">20</tspan><tspan font-family="Futura" font-size="53" font-weight="bold" fill="#fc0" x="69.712" y="55" textLength="36.04">1</tspan><tspan font-family="Futura" font-size="53" font-weight="bold" fill="#fc0" x="102.625" y="55" textLength="36.04">8</tspan></text><rect x="223.937" y="286.44882" width="28.346457" height="28.346457" fill="#fc0"/><rect x="223.937" y="286.44882" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="223.937" y="343.14173" width="28.346457" height="28.346457" fill="#fc0"/><rect x="223.937" y="343.14173" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="223.937" y="314.79527" width="28.346457" height="28.346457" fill="#fc0"/><rect x="223.937" y="314.79527" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="223.937" y="371.48819" width="28.346457" height="28.346457" fill="#fc0"/><rect x="223.937" y="371.48819" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="223.937" y="258.10236" width="28.346457" height="28.346457" fill="#fc0"/><rect x="223.937" y="258.10236" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="280.62992" y="258.10236" width="28.346457" height="28.346457" fill="#fc0"/><rect x="280.62992" y="258.10236" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="252.28346" y="258.10236" width="28.346457" height="28.346457" fill="#fc0"/><rect x="252.28346" y="258.10236" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="252.28346" y="371.48819" width="28.346457" height="28.346457" fill="#fc0"/><rect x="252.28346" y="371.48819" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="280.62992" y="371.48819" width="28.346457" height="28.346457" fill="#fc0"/><rect x="280.62992" y="371.48819" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="314.64567" y="286.44882" width="28.346457" height="28.346457" fill="#fc0"/><rect x="314.64567" y="286.44882" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="314.64567" y="343.14173" width="28.346457" height="28.346457" fill="#fc0"/><rect x="314.64567" y="343.14173" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="314.64567" y="314.79527" width="28.346457" height="28.346457" fill="#fc0"/><rect x="314.64567" y="314.79527" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="314.64567" y="371.48819" width="28.346457" height="28.346457" fill="#fc0"/><rect x="314.64567" y="371.48819" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="314.64567" y="258.10236" width="28.346457" height="28.346457" fill="#fc0"/><rect x="314.64567" y="258.10236" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="371.33858" y="258.10236" width="28.346457" height="28.346457" fill="#fc0"/><rect x="371.33858" y="258.10236" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="342.99212" y="258.10236" width="28.346457" height="28.346457" fill="#fc0"/><rect x="342.99212" y="258.10236" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="342.99212" y="371.48819" width="28.346457" height="28.346457" fill="#fc0"/><rect x="342.99212" y="371.48819" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="371.33858" y="371.48819" width="28.346457" height="28.346457" fill="#fc0"/><rect x="371.33858" y="371.48819" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="371.33858" y="286.44882" width="28.346457" height="28.346457" fill="#fc0"/><rect x="371.33858" y="286.44882" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="371.33858" y="343.14173" width="28.346457" height="28.346457" fill="#fc0"/><rect x="371.33858" y="343.14173" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="371.33858" y="314.79527" width="28.346457" height="28.346457" fill="#fc0"/><rect x="371.33858" y="314.79527" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="405.35433" y="286.44882" width="28.346457" height="28.346457" fill="#fc0"/><rect x="405.35433" y="286.44882" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="405.35433" y="343.14173" width="28.346457" height="28.346457" fill="#fc0"/><rect x="405.35433" y="343.14173" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="405.35433" y="314.79527" width="28.346457" height="28.346457" fill="#fc0"/><rect x="405.35433" y="314.79527" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="405.35433" y="371.48819" width="28.346457" height="28.346457" fill="#fc0"/><rect x="405.35433" y="371.48819" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="405.35433" y="258.10236" width="28.346457" height="28.346457" fill="#fc0"/><rect x="405.35433" y="258.10236" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="433.70078" y="258.10236" width="28.346457" height="28.346457" fill="#fc0"/><rect x="433.70078" y="258.10236" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="462.04724" y="286.44882" width="28.346457" height="28.346457" fill="#fc0"/><rect x="462.04724" y="286.44882" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="462.04724" y="314.79527" width="28.346457" height="28.346457" fill="#fc0"/><rect x="462.04724" y="314.79527" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="433.70078" y="371.48819" width="28.346457" height="28.346457" fill="#fc0"/><rect x="433.70078" y="371.48819" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="462.04724" y="343.14173" width="28.346457" height="28.346457" fill="#fc0"/><rect x="462.04724" y="343.14173" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="496.063" y="286.44882" width="28.346457" height="28.346457" fill="#fc0"/><rect x="496.063" y="286.44882" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="496.063" y="343.14173" width="28.346457" height="28.346457" fill="#fc0"/><rect x="496.063" y="343.14173" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="496.063" y="314.79527" width="28.346457" height="28.346457" fill="#fc0"/><rect x="496.063" y="314.79527" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="496.063" y="371.48819" width="28.346457" height="28.346457" fill="#fc0"/><rect x="496.063" y="371.48819" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="496.063" y="258.10236" width="28.346457" height="28.346457" fill="#fc0"/><rect x="496.063" y="258.10236" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="524.40945" y="258.10236" width="28.346457" height="28.346457" fill="#fc0"/><rect x="524.40945" y="258.10236" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="552.7559" y="258.10236" width="28.346457" height="28.346457" fill="#fc0"/><rect x="552.7559" y="258.10236" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="524.40945" y="314.79527" width="28.346457" height="28.346457" fill="#fc0"/><rect x="524.40945" y="314.79527" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="524.40945" y="371.48819" width="28.346457" height="28.346457" fill="#fc0"/><rect x="524.40945" y="371.48819" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="552.7559" y="371.48819" width="28.346457" height="28.346457" fill="#fc0"/><rect x="552.7559" y="371.48819" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="223.937" y="139.04724" width="28.346457" height="28.346457" fill="#fc0"/><rect x="223.937" y="139.04724" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="223.937" y="195.74016" width="28.346457" height="28.346457" fill="#fc0"/><rect x="223.937" y="195.74016" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="223.937" y="167.3937" width="28.346457" height="28.346457" fill="#fc0"/><rect x="223.937" y="167.3937" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="223.937" y="224.08661" width="28.346457" height="28.346457" fill="#fc0"/><rect x="223.937" y="224.08661" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="223.937" y="110.70079" width="28.346457" height="28.346457" fill="#fc0"/><rect x="223.937" y="110.70079" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="252.28346" y="110.70079" width="28.346457" height="28.346457" fill="#fc0"/><rect x="252.28346" y="110.70079" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="280.62992" y="110.70079" width="28.346457" height="28.346457" fill="#fc0"/><rect x="280.62992" y="110.70079" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="252.28346" y="167.3937" width="28.346457" height="28.346457" fill="#fc0"/><rect x="252.28346" y="167.3937" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="252.28346" y="224.08661" width="28.346457" height="28.346457" fill="#fc0"/><rect x="252.28346" y="224.08661" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="280.62992" y="224.08661" width="28.346457" height="28.346457" fill="#fc0"/><rect x="280.62992" y="224.08661" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="314.64567" y="139.04724" width="28.346457" height="28.346457" fill="#fc0"/><rect x="314.64567" y="139.04724" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="314.64567" y="195.74016" width="28.346457" height="28.346457" fill="#fc0"/><rect x="314.64567" y="195.74016" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="314.64567" y="167.3937" width="28.346457" height="28.346457" fill="#fc0"/><rect x="314.64567" y="167.3937" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="314.64567" y="224.08661" width="28.346457" height="28.346457" fill="#fc0"/><rect x="314.64567" y="224.08661" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="314.64567" y="110.70079" width="28.346457" height="28.346457" fill="#fc0"/><rect x="314.64567" y="110.70079" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="342.99212" y="110.70079" width="28.346457" height="28.346457" fill="#fc0"/><rect x="342.99212" y="110.70079" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="371.33858" y="139.04724" width="28.346457" height="28.346457" fill="#fc0"/><rect x="371.33858" y="139.04724" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="371.33858" y="167.3937" width="28.346457" height="28.346457" fill="#fc0"/><rect x="371.33858" y="167.3937" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="342.99212" y="224.08661" width="28.346457" height="28.346457" fill="#fc0"/><rect x="342.99212" y="224.08661" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="371.33858" y="195.74016" width="28.346457" height="28.346457" fill="#fc0"/><rect x="371.33858" y="195.74016" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="405.35433" y="139.04724" width="28.346457" height="28.346457" fill="#fc0"/><rect x="405.35433" y="139.04724" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="405.35433" y="195.74016" width="28.346457" height="28.346457" fill="#fc0"/><rect x="405.35433" y="195.74016" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="405.35433" y="167.3937" width="28.346457" height="28.346457" fill="#fc0"/><rect x="405.35433" y="167.3937" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="405.35433" y="224.08661" width="28.346457" height="28.346457" fill="#fc0"/><rect x="405.35433" y="224.08661" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="405.35433" y="110.70079" width="28.346457" height="28.346457" fill="#fc0"/><rect x="405.35433" y="110.70079" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="462.04724" y="110.70079" width="28.346457" height="28.346457" fill="#fc0"/><rect x="462.04724" y="110.70079" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="462.04724" y="139.04724" width="28.346457" height="28.346457" fill="#fc0"/><rect x="462.04724" y="139.04724" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="462.04724" y="167.3937" width="28.346457" height="28.346457" fill="#fc0"/><rect x="462.04724" y="167.3937" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="433.70078" y="224.08661" width="28.346457" height="28.346457" fill="#fc0"/><rect x="433.70078" y="224.08661" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="462.04724" y="195.74016" width="28.346457" height="28.346457" fill="#fc0"/><rect x="462.04724" y="195.74016" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="462.04724" y="224.08661" width="28.346457" height="28.346457" fill="#fc0"/><rect x="462.04724" y="224.08661" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="425.19685" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="425.19685" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="396.8504" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="396.8504" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="368.50393" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="368.50393" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="340.15748" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="340.15748" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="311.81102" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="311.81102" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="283.46457" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="283.46457" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="255.11811" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="255.11811" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="226.77165" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="226.77165" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="198.4252" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="198.4252" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="170.07874" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="170.07874" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="141.73228" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="141.73228" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="113.385826" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="113.385826" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="198.4252" y="425.19685" width="28.346457" height="28.346457" fill="white"/><rect x="198.4252" y="425.19685" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="198.4252" y="56.692913" width="28.346457" height="28.346457" fill="white"/><rect x="198.4252" y="56.692913" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="56.692913" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="56.692913" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="170.07874" y="85.03937" width="28.346457" height="28.346457" fill="white"/><rect x="170.07874" y="85.03937" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="425.19685" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="425.19685" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="396.8504" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="396.8504" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="368.50393" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="368.50393" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="340.15748" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="340.15748" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="311.81102" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="311.81102" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="283.46457" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="283.46457" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="255.11811" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="255.11811" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="226.77165" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="226.77165" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="198.4252" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="198.4252" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="170.07874" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="170.07874" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="141.73228" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="141.73228" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="113.385826" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="113.385826" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="56.692913" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="56.692913" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="606.61417" y="85.03937" width="28.346457" height="28.346457" fill="white"/><rect x="606.61417" y="85.03937" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="578.2677" y="56.692913" width="28.346457" height="28.346457" fill="white"/><rect x="578.2677" y="56.692913" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><rect x="578.2677" y="425.19685" width="28.346457" height="28.346457" fill="white"/><rect x="578.2677" y="425.19685" width="28.346457" height="28.346457" stroke="#039" stroke-linecap="butt" stroke-linejoin="miter" stroke-width=".5"/><text transform="translate(227.77165 57.692913)" fill="white"><tspan font-family="Consolas" font-size="31" font-weight="500" fill="white" x="21.352523" y="23" textLength="306.79102">HTTPS://EDUCODE.BE</tspan></text><text transform="translate(226.77165 427.34645)" fill="white"><tspan font-family="Consolas" font-size="30" font-weight="500" fill="white" x="27.300765" y="22" textLength="296.89453">BRUSSELS - BELGIUM</tspan></text></g></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/subscribe.py	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,99 @@
+from flask import render_template, redirect, url_for, flash
+from flask_babel import lazy_gettext, gettext, get_locale
+from flask_wtf import Form
+from trytond.transaction import Transaction
+from wtforms.fields import (
+    StringField, SelectField, BooleanField, TextAreaField, SubmitField)
+from wtforms.fields.html5 import EmailField
+from wtforms.validators import DataRequired, ValidationError
+
+from . import app, tryton
+
+Address = tryton.pool.get('party.address')
+ContactMechanism = tryton.pool.get('party.contact_mechanism')
+Country = tryton.pool.get('country.country')
+Language = tryton.pool.get('ir.lang')
+Party = tryton.pool.get('party.party')
+
+with Transaction().start(app.config['TRYTON_DATABASE'], 0):
+    countries = Country.search([])
+    country_choices = [(c.id, c.name) for c in countries]
+    belgium, = Country.search([('code', '=', 'BE')])
+
+
+class RequiredIfFilled:
+    def __init__(self, fieldname, message=None):
+        self.fieldname = fieldname
+        if not message:
+            message = lazy_gettext(
+                "This field is required if '%(other_label)s' is filled.")
+        self.message = message
+
+    def __call__(self, form, field):
+        try:
+            other = form[self.fieldname]
+        except KeyError:
+            raise ValidationError(
+                gettext("Invalid field name '%s'.") % self.fieldname)
+        if other.data and not field.data:
+            d = {
+                'other_label': (other.label.text if hasattr(other, 'label')
+                    else self.fieldname),
+                'other_name': self.fieldname,
+                }
+            raise ValidationError(self.message % d)
+
+
+class SubscribeForm(Form):
+
+    name = StringField(
+        lazy_gettext("Name"), validators=[DataRequired()])
+    email = EmailField(
+        lazy_gettext("E-mail"), validators=[DataRequired()])
+    institute = StringField(
+        lazy_gettext("Institute"), validators=[DataRequired()])
+    country = SelectField(
+        lazy_gettext("Country"),
+        choices=[(c.id, c.name) for c in countries],
+        default=belgium.id,
+        coerce=int,
+        validators=[DataRequired()])
+
+    want_to_attend = BooleanField(
+        lazy_gettext("I want to attend"))
+    topic_to_attend = TextAreaField(
+        lazy_gettext("Topic to attend"),
+        validators=[RequiredIfFilled('want_to_attend')])
+
+    want_to_teach = BooleanField(
+        lazy_gettext("I want to teach"))
+    topic_to_teach = TextAreaField(
+        lazy_gettext("Topic to teach"),
+        validators=[RequiredIfFilled('want_to_teach')])
+
+    subscribe = SubmitField(
+        lazy_gettext("Subscribe"))
+
+
+@app.route('/<lang_code>/subscribe', methods={'GET', 'POST'})
+@tryton.transaction()
+def subscribe():
+    form = SubscribeForm()
+    if form.validate_on_submit():
+        try:
+            lang, = Language.search([('code', '=', str(get_locale()))])
+        except ValueError:
+            lang = None
+        party = Party()
+        party.name = form.name.data
+        party.contact_mechanisms = [
+            ContactMechanism(type='email', value=form.email.data)]
+        party.institute = form.institute.data
+        party.topic_to_attend = form.topic_to_attend.data
+        party.topic_to_teach = form.topic_to_teach.data
+        party.lang = lang
+        party.addresses = [Address(country=form.country.data)]
+        party.save()
+        flash(gettext("Your subscription has been registered"))
+        return redirect(url_for('index'))
+    return render_template('subscribe.html', form=form)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/templates/index.html	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,79 @@
+{% extends "layout.html" %}
+{% block content %}
+<div class="container">
+    <div class="jumbotron">
+        <h1 id="educode-2018">
+            <img src="{{ url_for('static', filename='logo.svg') }}" class="img-responsive" alt="{{ gettext("EduCode 2018") }}"></img>
+            <small>{{ gettext("teaching, digital and coding in class") }}</small>
+        </h1>
+        <p>
+        {{ gettext("An international conference in Brussels, Bozar, Monday 27 August, Tuesday 28 and Wednesday 29 August 2018") }}
+        </p>
+        <p>
+        <a class="btn btn-lg btn-primary" href="{{ url_for('subscribe') }}" role="button">
+            {{ gettext("Keep me informed") }}
+        </a>
+        </p>
+    </div>
+    <div class="row">
+        <p class="lead">
+        {{ gettext("During 3 days, in Bozar and at the Royal Academy, teachers, school directors, parents and students, researchers and anyone interested in teaching and digital as well as in continuing education are invited to reflect on the use digital education and teaching through digital at all levels (primary, secondary, higher and social promotion), with a significant part devoted to programming. Many practical training will also be organized.") }}
+        </p>
+        <p>
+        {{ gettext("The event will be organized in 3 days for 4 audiences:") }}
+        <ol>
+            <li>
+                {{ gettext("2 days dedicated mainly to teachers (Monday 27 August and Tuesday 28 August)") }}
+            </li>
+            <li>
+                {{ gettext("1 day open to the general public (Monday 27 August)") }}
+            </li>
+            <li>
+                {{ gettext("2 half-days of conferences and activities dedicated to school directors (Monday 27 and Tuesday 28 afternoon)") }}
+            </li>
+            <li>
+                {{ gettext("1 day dedicated to scientific research on pedagogy, teaching and digital (Wednesday, August 29)") }}
+            </li>
+        </ol>
+        </p>
+    </div>
+    <div class="row">
+        <h3 id="content">{{ gettext("Content") }}</h3>
+        <p>
+        {{ gettext("Some lectures but especially practical workshops and presentations, especially by teachers and their students, or by representatives of various specialized societies or associations that contribute to the training in the use of ICT at school (such as KodoWallonia, Devoxx4kids, SICarré, The hand in the dough, the Scientothèque, the experimentarium, Molengeek, the actors of Fablab ...)") }}
+        </p>
+        <p>
+        {{ gettext("The steering team of the conference wishes to put at the service of the Pact of Excellence its knowledge of the actors and its capacity of organization of meetings between professionals of various horizons.") }}
+        </p>
+    </div>
+    <div class="row">
+        <h3 id="location">{{ gettext("Location") }}</h3>
+        <p>
+        {{ gettext("in Bozar, at the Royal Academy of Belgium (on the other side of the Place Royale in Brussels) and probably at the Free University of Brussels (the workshops of Tuesday 28)") }}
+        </p>
+    </div>
+    <div class="row">
+        <h3 id="activities">{{ gettext("Activities") }}</h3>
+        <ul>
+            <li>
+                {{ gettext("Monday 27/8, 9h - 18h: lectures for teachers and anyone interested. During the breaks, schools, associations, companies expose their achievements and projects related to digital and education, and projects made in classrooms (in corridors and other spaces of Bozar)") }}
+            </li>
+            <li>
+                {{ gettext("Monday 27/8 14h to 15h: Roundtable * Teaching and technology in the world: what works or not, and why, what could be done * (with national representatives from different countries)") }}
+            </li>
+            <li>
+                {{ gettext("Monday 27/8 19h: Conference by Thomas Pesquet (ESA) (tbc): * Experiments conducted by ESA with European students *") }}
+            </li>
+            <li>
+                {{ gettext("Tuesday 28/8 from 9h to 17h: lectures and practical workshops are organized (100 computers will be installed in seminar rooms, and participants will be invited to come with their laptops)") }}
+            </li>
+            <li>
+                {{ gettext("Tuesday 28/8 from 17h to 19h: closing cocktail") }}
+            </li>
+            <li>
+                {{ gettext("Wednesday 29/8 from 8h to 18h: a day devoted to research in education and digital") }}
+            </li>
+        </ul>
+    </div>
+</div>
+{% endblock content %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/templates/layout.html	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,43 @@
+{% extends "bootstrap/base.html" %}
+{% import "bootstrap/utils.html" as utils %}
+{% block html_attribs%} lang="{{ get_locale() }}"{% endblock %}
+{% block title %}EduCode 2018{% endblock %}
+{% block styles %}
+{{ super() }}
+<link href="{{ url_for('static', filename='educode.css') }}" rel="stylesheet">
+{% endblock styles %}
+{% block navbar %}
+<div class="container">
+    <div class="header clearfix">
+        <nav>
+            <ul class="nav nav-pills pull-right">
+                <li role="presentation" {% if request.url_rule.endpoint == 'index' %} class="active" {% endif %}>
+                    <a href="{{ url_for('index') }}">{{ gettext("Home") }}</a>
+                </li>
+                <li role="presentation" {% if request.url_rule.endpoint == 'about' %} class="active" {% endif %}>
+                    <a href="#">{{ gettext("About") }}</a>
+                </li>
+                <li role="presentation" {% if request.url_rule.endpoint == 'contact' %} class="active" {% endif %}>
+                    <a href="#">{{ gettext("Contact") }}</a>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
+                        {{ get_locale().display_name.title() }} <span class="caret"></span>
+                    </a>
+                    <ul class="dropdown-menu">
+                        {% for translation in list_translations() %}
+                        <li>
+                            <a href="{{ url_lang(translation) }}">
+                                {{ translation.display_name.title() }}
+                            </a>
+                        </li>
+                        {% endfor %}
+                    </ul>
+                </li>
+            </ul>
+        </nav>
+        <h3>EduCode 2018</h3>
+    </div>
+    {{ utils.flashed_messages(dismissible=True) }}
+</div>
+{% endblock navbar %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/templates/subscribe.html	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,7 @@
+{% extends "layout.html" %}
+{% import "bootstrap/wtf.html" as wtf %}
+{% block content %}
+<div class="container">
+    {{ wtf.quick_form(form, extra_classes='form-subscribe', button_map={'subscribe': 'primary'}) }}
+</div>
+{% endblock content %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/translations/en/LC_MESSAGES/messages.po	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,211 @@
+# English translations for PROJECT.
+# Copyright (C) 2018 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-01-30 16:51+0100\n"
+"PO-Revision-Date: 2018-01-30 12:49+0100\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language: en\n"
+"Language-Team: en <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.5.3\n"
+
+#: educode/subscribe.py:28
+#, python-format
+msgid "This field is required if '%(other_label)s' is filled."
+msgstr ""
+
+#: educode/subscribe.py:37
+#, python-format
+msgid "Invalid field name '%s'."
+msgstr ""
+
+#: educode/subscribe.py:50
+msgid "Name"
+msgstr ""
+
+#: educode/subscribe.py:52
+msgid "E-mail"
+msgstr ""
+
+#: educode/subscribe.py:54
+msgid "Institute"
+msgstr ""
+
+#: educode/subscribe.py:56
+msgid "Country"
+msgstr ""
+
+#: educode/subscribe.py:63
+msgid "I want to attend"
+msgstr ""
+
+#: educode/subscribe.py:65
+msgid "Topic to attend"
+msgstr ""
+
+#: educode/subscribe.py:69
+msgid "I want to teach"
+msgstr ""
+
+#: educode/subscribe.py:71
+msgid "Topic to teach"
+msgstr ""
+
+#: educode/subscribe.py:75
+msgid "Subscribe"
+msgstr ""
+
+#: educode/subscribe.py:97
+msgid "Your subscription has been registered"
+msgstr ""
+
+#: educode/templates/index.html:6
+msgid "EduCode 2018"
+msgstr ""
+
+#: educode/templates/index.html:7
+msgid "teaching, digital and coding in class"
+msgstr ""
+
+#: educode/templates/index.html:10
+msgid ""
+"An international conference in Brussels, Bozar, Monday 27 August, Tuesday"
+" 28 and Wednesday 29 August 2018"
+msgstr ""
+
+#: educode/templates/index.html:14
+msgid "Keep me informed"
+msgstr ""
+
+#: educode/templates/index.html:20
+msgid ""
+"During 3 days, in Bozar and at the Royal Academy, teachers, school "
+"directors, parents and students, researchers and anyone interested in "
+"teaching and digital as well as in continuing education are invited to "
+"reflect on the use digital education and teaching through digital at all "
+"levels (primary, secondary, higher and social promotion), with a "
+"significant part devoted to programming. Many practical training will "
+"also be organized."
+msgstr ""
+
+#: educode/templates/index.html:23
+msgid "The event will be organized in 3 days for 4 audiences:"
+msgstr ""
+
+#: educode/templates/index.html:26
+msgid ""
+"2 days dedicated mainly to teachers (Monday 27 August and Tuesday 28 "
+"August)"
+msgstr ""
+
+#: educode/templates/index.html:29
+msgid "1 day open to the general public (Monday 27 August)"
+msgstr ""
+
+#: educode/templates/index.html:32
+msgid ""
+"2 half-days of conferences and activities dedicated to school directors "
+"(Monday 27 and Tuesday 28 afternoon)"
+msgstr ""
+
+#: educode/templates/index.html:35
+msgid ""
+"1 day dedicated to scientific research on pedagogy, teaching and digital "
+"(Wednesday, August 29)"
+msgstr ""
+
+#: educode/templates/index.html:41
+msgid "Content"
+msgstr ""
+
+#: educode/templates/index.html:43
+msgid ""
+"Some lectures but especially practical workshops and presentations, "
+"especially by teachers and their students, or by representatives of "
+"various specialized societies or associations that contribute to the "
+"training in the use of ICT at school (such as KodoWallonia, Devoxx4kids, "
+"SICarré, The hand in the dough, the Scientothèque, the experimentarium, "
+"Molengeek, the actors of Fablab ...)"
+msgstr ""
+
+#: educode/templates/index.html:46
+msgid ""
+"The steering team of the conference wishes to put at the service of the "
+"Pact of Excellence its knowledge of the actors and its capacity of "
+"organization of meetings between professionals of various horizons."
+msgstr ""
+
+#: educode/templates/index.html:50
+msgid "Location"
+msgstr ""
+
+#: educode/templates/index.html:52
+msgid ""
+"in Bozar, at the Royal Academy of Belgium (on the other side of the Place"
+" Royale in Brussels) and probably at the Free University of Brussels (the"
+" workshops of Tuesday 28)"
+msgstr ""
+
+#: educode/templates/index.html:56
+msgid "Activities"
+msgstr ""
+
+#: educode/templates/index.html:59
+msgid ""
+"Monday 27/8, 9h - 18h: lectures for teachers and anyone interested. "
+"During the breaks, schools, associations, companies expose their "
+"achievements and projects related to digital and education, and projects "
+"made in classrooms (in corridors and other spaces of Bozar)"
+msgstr ""
+
+#: educode/templates/index.html:62
+msgid ""
+"Monday 27/8 14h to 15h: Roundtable * Teaching and technology in the "
+"world: what works or not, and why, what could be done * (with national "
+"representatives from different countries)"
+msgstr ""
+
+#: educode/templates/index.html:65
+msgid ""
+"Monday 27/8 19h: Conference by Thomas Pesquet (ESA) (tbc): * Experiments "
+"conducted by ESA with European students *"
+msgstr ""
+
+#: educode/templates/index.html:68
+msgid ""
+"Tuesday 28/8 from 9h to 17h: lectures and practical workshops are "
+"organized (100 computers will be installed in seminar rooms, and "
+"participants will be invited to come with their laptops)"
+msgstr ""
+
+#: educode/templates/index.html:71
+msgid "Tuesday 28/8 from 17h to 19h: closing cocktail"
+msgstr ""
+
+#: educode/templates/index.html:74
+msgid ""
+"Wednesday 29/8 from 8h to 18h: a day devoted to research in education and"
+" digital"
+msgstr ""
+
+#: educode/templates/layout.html:15
+msgid "Home"
+msgstr ""
+
+#: educode/templates/layout.html:18
+msgid "About"
+msgstr ""
+
+#: educode/templates/layout.html:21
+msgid "Contact"
+msgstr ""
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/translations/fr/LC_MESSAGES/messages.po	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,255 @@
+# French translations for PROJECT.
+# Copyright (C) 2018 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-01-30 16:51+0100\n"
+"PO-Revision-Date: 2018-01-30 12:44+0100\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language: fr\n"
+"Language-Team: fr <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.5.3\n"
+
+#: educode/subscribe.py:28
+#, python-format
+msgid "This field is required if '%(other_label)s' is filled."
+msgstr ""
+
+#: educode/subscribe.py:37
+#, python-format
+msgid "Invalid field name '%s'."
+msgstr "Nom du champs '%s' n'est pas valide."
+
+#: educode/subscribe.py:50
+msgid "Name"
+msgstr "Nom"
+
+#: educode/subscribe.py:52
+msgid "E-mail"
+msgstr "E-mail"
+
+#: educode/subscribe.py:54
+msgid "Institute"
+msgstr "Institut"
+
+#: educode/subscribe.py:56
+msgid "Country"
+msgstr "Pays"
+
+#: educode/subscribe.py:63
+msgid "I want to attend"
+msgstr "Je veux assister"
+
+#: educode/subscribe.py:65
+msgid "Topic to attend"
+msgstr "Sujet à assister"
+
+#: educode/subscribe.py:69
+msgid "I want to teach"
+msgstr "Je veux enseigner"
+
+#: educode/subscribe.py:71
+msgid "Topic to teach"
+msgstr "Sujet à enseigner"
+
+#: educode/subscribe.py:75
+msgid "Subscribe"
+msgstr "Souscrire"
+
+#: educode/subscribe.py:97
+msgid "Your subscription has been registered"
+msgstr "Votre souscription a été enregistrée"
+
+#: educode/templates/index.html:6
+msgid "EduCode 2018"
+msgstr ""
+
+#: educode/templates/index.html:7
+msgid "teaching, digital and coding in class"
+msgstr "enseignement, numérique et codage dans la classe"
+
+#: educode/templates/index.html:10
+msgid ""
+"An international conference in Brussels, Bozar, Monday 27 August, Tuesday"
+" 28 and Wednesday 29 August 2018"
+msgstr ""
+"Une conférence internationale à Bruxelles, Bozar, lundi 27 août, mardi 28"
+" et mercredi 29 août 2018"
+
+#: educode/templates/index.html:14
+msgid "Keep me informed"
+msgstr "Me tenir informé"
+
+#: educode/templates/index.html:20
+msgid ""
+"During 3 days, in Bozar and at the Royal Academy, teachers, school "
+"directors, parents and students, researchers and anyone interested in "
+"teaching and digital as well as in continuing education are invited to "
+"reflect on the use digital education and teaching through digital at all "
+"levels (primary, secondary, higher and social promotion), with a "
+"significant part devoted to programming. Many practical training will "
+"also be organized."
+msgstr ""
+"Durant 3 journées, à Bozar et à l'Académie royale, les professeurs, "
+"directeurs d'écoles, parents et étudiants, chercheurs et toute personne "
+"intéressée par l'enseignement et le numérique comme par la formation "
+"continue sont invités à réfléchir sur l'usage du numérique dans les "
+"l'enseignement et l’enseignement grâce au numérique tous niveaux "
+"confondus (primaire, secondaire, supérieur et enseignement de promotion "
+"sociale), avec une partie importante consacrée à la programmation. De "
+"nombreuses formations pratiques seront également organisées."
+
+#: educode/templates/index.html:23
+msgid "The event will be organized in 3 days for 4 audiences:"
+msgstr "L’évènement s’organisera en 3 journées pour 4 publics :"
+
+#: educode/templates/index.html:26
+msgid ""
+"2 days dedicated mainly to teachers (Monday 27 August and Tuesday 28 "
+"August)"
+msgstr ""
+"2 journées dédiées essentiellement aux enseignants (lundi 27 août et "
+"mardi 28 août)"
+
+#: educode/templates/index.html:29
+msgid "1 day open to the general public (Monday 27 August)"
+msgstr "1 journée ouverte au grand public (lundi 27 août)"
+
+#: educode/templates/index.html:32
+msgid ""
+"2 half-days of conferences and activities dedicated to school directors "
+"(Monday 27 and Tuesday 28 afternoon)"
+msgstr ""
+"2 demi-journées de conférences et activités dédiées aux directeurs "
+"d’établissement (lundi 27 et mardi 28 après-midi)"
+
+#: educode/templates/index.html:35
+msgid ""
+"1 day dedicated to scientific research on pedagogy, teaching and digital "
+"(Wednesday, August 29)"
+msgstr ""
+"1 journée consacrée à la recherche scientifique sur la pédagogie, "
+"l'enseignement et le numérique (mercredi 29 août)"
+
+#: educode/templates/index.html:41
+msgid "Content"
+msgstr "Contenu"
+
+#: educode/templates/index.html:43
+msgid ""
+"Some lectures but especially practical workshops and presentations, "
+"especially by teachers and their students, or by representatives of "
+"various specialized societies or associations that contribute to the "
+"training in the use of ICT at school (such as KodoWallonia, Devoxx4kids, "
+"SICarré, The hand in the dough, the Scientothèque, the experimentarium, "
+"Molengeek, the actors of Fablab ...)"
+msgstr ""
+"Quelques conférences mais surtout des ateliers pratiques et des "
+"présentations, notamment par des enseignants et leurs étudiants, ou par "
+"des représentants des diverses sociétés spécialisées ou des associations "
+"qui contribuent à la formation à l'utilisation des TICE à l'école (telles"
+" que KodoWallonie, Devoxx4kids, SICarré, La main à la pâte, la "
+"Scientothèque, l'expérimentarium, Molengeek, les acteurs des Fablab ... )"
+
+#: educode/templates/index.html:46
+msgid ""
+"The steering team of the conference wishes to put at the service of the "
+"Pact of Excellence its knowledge of the actors and its capacity of "
+"organization of meetings between professionals of various horizons."
+msgstr ""
+"L'équipe de pilotage de la conférence souhaite mettre au service du Pacte"
+" d'excellence sa connaissance des acteurs et sa capacité d'organisation "
+"de rencontres entre professionnels d'horizon divers."
+
+#: educode/templates/index.html:50
+msgid "Location"
+msgstr "Localisation"
+
+#: educode/templates/index.html:52
+msgid ""
+"in Bozar, at the Royal Academy of Belgium (on the other side of the Place"
+" Royale in Brussels) and probably at the Free University of Brussels (the"
+" workshops of Tuesday 28)"
+msgstr ""
+"à Bozar, à l'Académie royale de Belgique (de l'autre côté de la place "
+"Royale à Bruxelles) et sans doute à l'Université libre de Bruxelles (les "
+"ateliers de mardi 28)"
+
+#: educode/templates/index.html:56
+msgid "Activities"
+msgstr "Activités"
+
+#: educode/templates/index.html:59
+msgid ""
+"Monday 27/8, 9h - 18h: lectures for teachers and anyone interested. "
+"During the breaks, schools, associations, companies expose their "
+"achievements and projects related to digital and education, and projects "
+"made in classrooms (in corridors and other spaces of Bozar)"
+msgstr ""
+"lundi 27/8, 9h - 18h : conférences pour les enseignants et toute personne"
+" intéressée. Durant les pauses, les écoles, associations, entreprises "
+"exposent leurs réalisations et projets liés au numérique et à "
+"l'éducation, et des projets faits dans les classes (dans les couloirs et "
+"autres espaces de Bozar)"
+
+#: educode/templates/index.html:62
+msgid ""
+"Monday 27/8 14h to 15h: Roundtable * Teaching and technology in the "
+"world: what works or not, and why, what could be done * (with national "
+"representatives from different countries)"
+msgstr ""
+"lundi 27/8 14h à 15h : Table-ronde Enseignement et technologie dans le "
+"monde : ce qui marche ou pas, et pourquoi, ce qui pourrait être fait "
+"(avec des représentants nationaux de différents pays)"
+
+#: educode/templates/index.html:65
+msgid ""
+"Monday 27/8 19h: Conference by Thomas Pesquet (ESA) (tbc): * Experiments "
+"conducted by ESA with European students *"
+msgstr ""
+"undi 27/8 19h : Conférence par Thomas Pesquet (ESA) (tbc) : * Les "
+"expériences menées par ESA avec les étudiants européens *"
+
+#: educode/templates/index.html:68
+msgid ""
+"Tuesday 28/8 from 9h to 17h: lectures and practical workshops are "
+"organized (100 computers will be installed in seminar rooms, and "
+"participants will be invited to come with their laptops)"
+msgstr ""
+"mardi 28/8 de 9h à 17h : des exposés et des ateliers pratiques sont "
+"organisés (100 ordinateurs seront installés dans des locaux de "
+"séminaires, et les participants seront invités à venir avec leurs "
+"portables)"
+
+#: educode/templates/index.html:71
+msgid "Tuesday 28/8 from 17h to 19h: closing cocktail"
+msgstr "mardi 28/8 de 17h à 19h : cocktail de clôture"
+
+#: educode/templates/index.html:74
+msgid ""
+"Wednesday 29/8 from 8h to 18h: a day devoted to research in education and"
+" digital"
+msgstr ""
+"mercredi 29/8 de 8h à 18h : une journée consacrée à la recherche en "
+"éducation et au numérique"
+
+#: educode/templates/layout.html:15
+msgid "Home"
+msgstr "Accueil"
+
+#: educode/templates/layout.html:18
+msgid "About"
+msgstr "À propos"
+
+#: educode/templates/layout.html:21
+msgid "Contact"
+msgstr "Contact"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/translations/messages.pot	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,210 @@
+# Translations template for PROJECT.
+# Copyright (C) 2018 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-01-30 16:51+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.5.3\n"
+
+#: educode/subscribe.py:28
+#, python-format
+msgid "This field is required if '%(other_label)s' is filled."
+msgstr ""
+
+#: educode/subscribe.py:37
+#, python-format
+msgid "Invalid field name '%s'."
+msgstr ""
+
+#: educode/subscribe.py:50
+msgid "Name"
+msgstr ""
+
+#: educode/subscribe.py:52
+msgid "E-mail"
+msgstr ""
+
+#: educode/subscribe.py:54
+msgid "Institute"
+msgstr ""
+
+#: educode/subscribe.py:56
+msgid "Country"
+msgstr ""
+
+#: educode/subscribe.py:63
+msgid "I want to attend"
+msgstr ""
+
+#: educode/subscribe.py:65
+msgid "Topic to attend"
+msgstr ""
+
+#: educode/subscribe.py:69
+msgid "I want to teach"
+msgstr ""
+
+#: educode/subscribe.py:71
+msgid "Topic to teach"
+msgstr ""
+
+#: educode/subscribe.py:75
+msgid "Subscribe"
+msgstr ""
+
+#: educode/subscribe.py:97
+msgid "Your subscription has been registered"
+msgstr ""
+
+#: educode/templates/index.html:6
+msgid "EduCode 2018"
+msgstr ""
+
+#: educode/templates/index.html:7
+msgid "teaching, digital and coding in class"
+msgstr ""
+
+#: educode/templates/index.html:10
+msgid ""
+"An international conference in Brussels, Bozar, Monday 27 August, Tuesday"
+" 28 and Wednesday 29 August 2018"
+msgstr ""
+
+#: educode/templates/index.html:14
+msgid "Keep me informed"
+msgstr ""
+
+#: educode/templates/index.html:20
+msgid ""
+"During 3 days, in Bozar and at the Royal Academy, teachers, school "
+"directors, parents and students, researchers and anyone interested in "
+"teaching and digital as well as in continuing education are invited to "
+"reflect on the use digital education and teaching through digital at all "
+"levels (primary, secondary, higher and social promotion), with a "
+"significant part devoted to programming. Many practical training will "
+"also be organized."
+msgstr ""
+
+#: educode/templates/index.html:23
+msgid "The event will be organized in 3 days for 4 audiences:"
+msgstr ""
+
+#: educode/templates/index.html:26
+msgid ""
+"2 days dedicated mainly to teachers (Monday 27 August and Tuesday 28 "
+"August)"
+msgstr ""
+
+#: educode/templates/index.html:29
+msgid "1 day open to the general public (Monday 27 August)"
+msgstr ""
+
+#: educode/templates/index.html:32
+msgid ""
+"2 half-days of conferences and activities dedicated to school directors "
+"(Monday 27 and Tuesday 28 afternoon)"
+msgstr ""
+
+#: educode/templates/index.html:35
+msgid ""
+"1 day dedicated to scientific research on pedagogy, teaching and digital "
+"(Wednesday, August 29)"
+msgstr ""
+
+#: educode/templates/index.html:41
+msgid "Content"
+msgstr ""
+
+#: educode/templates/index.html:43
+msgid ""
+"Some lectures but especially practical workshops and presentations, "
+"especially by teachers and their students, or by representatives of "
+"various specialized societies or associations that contribute to the "
+"training in the use of ICT at school (such as KodoWallonia, Devoxx4kids, "
+"SICarré, The hand in the dough, the Scientothèque, the experimentarium, "
+"Molengeek, the actors of Fablab ...)"
+msgstr ""
+
+#: educode/templates/index.html:46
+msgid ""
+"The steering team of the conference wishes to put at the service of the "
+"Pact of Excellence its knowledge of the actors and its capacity of "
+"organization of meetings between professionals of various horizons."
+msgstr ""
+
+#: educode/templates/index.html:50
+msgid "Location"
+msgstr ""
+
+#: educode/templates/index.html:52
+msgid ""
+"in Bozar, at the Royal Academy of Belgium (on the other side of the Place"
+" Royale in Brussels) and probably at the Free University of Brussels (the"
+" workshops of Tuesday 28)"
+msgstr ""
+
+#: educode/templates/index.html:56
+msgid "Activities"
+msgstr ""
+
+#: educode/templates/index.html:59
+msgid ""
+"Monday 27/8, 9h - 18h: lectures for teachers and anyone interested. "
+"During the breaks, schools, associations, companies expose their "
+"achievements and projects related to digital and education, and projects "
+"made in classrooms (in corridors and other spaces of Bozar)"
+msgstr ""
+
+#: educode/templates/index.html:62
+msgid ""
+"Monday 27/8 14h to 15h: Roundtable * Teaching and technology in the "
+"world: what works or not, and why, what could be done * (with national "
+"representatives from different countries)"
+msgstr ""
+
+#: educode/templates/index.html:65
+msgid ""
+"Monday 27/8 19h: Conference by Thomas Pesquet (ESA) (tbc): * Experiments "
+"conducted by ESA with European students *"
+msgstr ""
+
+#: educode/templates/index.html:68
+msgid ""
+"Tuesday 28/8 from 9h to 17h: lectures and practical workshops are "
+"organized (100 computers will be installed in seminar rooms, and "
+"participants will be invited to come with their laptops)"
+msgstr ""
+
+#: educode/templates/index.html:71
+msgid "Tuesday 28/8 from 17h to 19h: closing cocktail"
+msgstr ""
+
+#: educode/templates/index.html:74
+msgid ""
+"Wednesday 29/8 from 8h to 18h: a day devoted to research in education and"
+" digital"
+msgstr ""
+
+#: educode/templates/layout.html:15
+msgid "Home"
+msgstr ""
+
+#: educode/templates/layout.html:18
+msgid "About"
+msgstr ""
+
+#: educode/templates/layout.html:21
+msgid "Contact"
+msgstr ""
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/educode/translations/nl/LC_MESSAGES/messages.po	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,211 @@
+# Dutch translations for PROJECT.
+# Copyright (C) 2018 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-01-30 16:51+0100\n"
+"PO-Revision-Date: 2018-01-30 12:44+0100\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language: nl\n"
+"Language-Team: nl <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.5.3\n"
+
+#: educode/subscribe.py:28
+#, python-format
+msgid "This field is required if '%(other_label)s' is filled."
+msgstr ""
+
+#: educode/subscribe.py:37
+#, python-format
+msgid "Invalid field name '%s'."
+msgstr ""
+
+#: educode/subscribe.py:50
+msgid "Name"
+msgstr ""
+
+#: educode/subscribe.py:52
+msgid "E-mail"
+msgstr ""
+
+#: educode/subscribe.py:54
+msgid "Institute"
+msgstr ""
+
+#: educode/subscribe.py:56
+msgid "Country"
+msgstr ""
+
+#: educode/subscribe.py:63
+msgid "I want to attend"
+msgstr ""
+
+#: educode/subscribe.py:65
+msgid "Topic to attend"
+msgstr ""
+
+#: educode/subscribe.py:69
+msgid "I want to teach"
+msgstr ""
+
+#: educode/subscribe.py:71
+msgid "Topic to teach"
+msgstr ""
+
+#: educode/subscribe.py:75
+msgid "Subscribe"
+msgstr ""
+
+#: educode/subscribe.py:97
+msgid "Your subscription has been registered"
+msgstr ""
+
+#: educode/templates/index.html:6
+msgid "EduCode 2018"
+msgstr ""
+
+#: educode/templates/index.html:7
+msgid "teaching, digital and coding in class"
+msgstr ""
+
+#: educode/templates/index.html:10
+msgid ""
+"An international conference in Brussels, Bozar, Monday 27 August, Tuesday"
+" 28 and Wednesday 29 August 2018"
+msgstr ""
+
+#: educode/templates/index.html:14
+msgid "Keep me informed"
+msgstr ""
+
+#: educode/templates/index.html:20
+msgid ""
+"During 3 days, in Bozar and at the Royal Academy, teachers, school "
+"directors, parents and students, researchers and anyone interested in "
+"teaching and digital as well as in continuing education are invited to "
+"reflect on the use digital education and teaching through digital at all "
+"levels (primary, secondary, higher and social promotion), with a "
+"significant part devoted to programming. Many practical training will "
+"also be organized."
+msgstr ""
+
+#: educode/templates/index.html:23
+msgid "The event will be organized in 3 days for 4 audiences:"
+msgstr ""
+
+#: educode/templates/index.html:26
+msgid ""
+"2 days dedicated mainly to teachers (Monday 27 August and Tuesday 28 "
+"August)"
+msgstr ""
+
+#: educode/templates/index.html:29
+msgid "1 day open to the general public (Monday 27 August)"
+msgstr ""
+
+#: educode/templates/index.html:32
+msgid ""
+"2 half-days of conferences and activities dedicated to school directors "
+"(Monday 27 and Tuesday 28 afternoon)"
+msgstr ""
+
+#: educode/templates/index.html:35
+msgid ""
+"1 day dedicated to scientific research on pedagogy, teaching and digital "
+"(Wednesday, August 29)"
+msgstr ""
+
+#: educode/templates/index.html:41
+msgid "Content"
+msgstr ""
+
+#: educode/templates/index.html:43
+msgid ""
+"Some lectures but especially practical workshops and presentations, "
+"especially by teachers and their students, or by representatives of "
+"various specialized societies or associations that contribute to the "
+"training in the use of ICT at school (such as KodoWallonia, Devoxx4kids, "
+"SICarré, The hand in the dough, the Scientothèque, the experimentarium, "
+"Molengeek, the actors of Fablab ...)"
+msgstr ""
+
+#: educode/templates/index.html:46
+msgid ""
+"The steering team of the conference wishes to put at the service of the "
+"Pact of Excellence its knowledge of the actors and its capacity of "
+"organization of meetings between professionals of various horizons."
+msgstr ""
+
+#: educode/templates/index.html:50
+msgid "Location"
+msgstr ""
+
+#: educode/templates/index.html:52
+msgid ""
+"in Bozar, at the Royal Academy of Belgium (on the other side of the Place"
+" Royale in Brussels) and probably at the Free University of Brussels (the"
+" workshops of Tuesday 28)"
+msgstr ""
+
+#: educode/templates/index.html:56
+msgid "Activities"
+msgstr ""
+
+#: educode/templates/index.html:59
+msgid ""
+"Monday 27/8, 9h - 18h: lectures for teachers and anyone interested. "
+"During the breaks, schools, associations, companies expose their "
+"achievements and projects related to digital and education, and projects "
+"made in classrooms (in corridors and other spaces of Bozar)"
+msgstr ""
+
+#: educode/templates/index.html:62
+msgid ""
+"Monday 27/8 14h to 15h: Roundtable * Teaching and technology in the "
+"world: what works or not, and why, what could be done * (with national "
+"representatives from different countries)"
+msgstr ""
+
+#: educode/templates/index.html:65
+msgid ""
+"Monday 27/8 19h: Conference by Thomas Pesquet (ESA) (tbc): * Experiments "
+"conducted by ESA with European students *"
+msgstr ""
+
+#: educode/templates/index.html:68
+msgid ""
+"Tuesday 28/8 from 9h to 17h: lectures and practical workshops are "
+"organized (100 computers will be installed in seminar rooms, and "
+"participants will be invited to come with their laptops)"
+msgstr ""
+
+#: educode/templates/index.html:71
+msgid "Tuesday 28/8 from 17h to 19h: closing cocktail"
+msgstr ""
+
+#: educode/templates/index.html:74
+msgid ""
+"Wednesday 29/8 from 8h to 18h: a day devoted to research in education and"
+" digital"
+msgstr ""
+
+#: educode/templates/layout.html:15
+msgid "Home"
+msgstr ""
+
+#: educode/templates/layout.html:18
+msgid "About"
+msgstr ""
+
+#: educode/templates/layout.html:21
+msgid "Contact"
+msgstr ""
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/requirements.txt	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,6 @@
+Flask-Babel
+flask >= 0.11
+flask_bootstrap >= 3.0
+flask_tryton
+flask_wtf >= 0.14
+wtforms >= 2.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/runserver.py	Tue Jan 30 17:35:56 2018 +0100
@@ -0,0 +1,19 @@
+#!/usr/bin/env python
+import argparse
+import os
+
+
+parser = argparse.ArgumentParser()
+parser.add_argument("-c", "--config", dest="configfile", metavar="FILE",
+    required=True, help="Specify configuration file")
+parser.add_argument("--logconf", dest="logconf", metavar="FILE",
+    help="logging configuration file (ConfigParser format)")
+parser.add_argument("listen", nargs='?', default="0.0.0.0")
+
+options = parser.parse_args()
+os.environ['EDUCODE_CONFIG'] = os.path.abspath(options.configfile)
+if options.logconf:
+    os.environ['EDUCODE_LOGGING'] = os.path.abspath(options.logconf)
+
+from educode import app  # noqa: F402
+app.run(host=options.listen)