summaryrefslogtreecommitdiff
path: root/template.py
blob: c8153cc86a8265b3306d614b86414114467cf903 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python3
# This file is in the public domain.
#
# This script runs the jinja2 templating engine on an input template-file
# using the specified locale for gettext translations, and outputs
# the resulting (HTML) ouptut-file.
#
# Note that the gettext files need to be prepared first. This script
# is thus to be invoked via the Makefile.
import os
import os.path
import sys
import re
import gettext
import subprocess
import jinja2
import glob
import codecs
import os
sys.path.append(os.getcwd())
import i18nfix

env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
                         extensions=["jinja2.ext.i18n"],
                         lstrip_blocks=True,
                         trim_blocks=True,
                         undefined=jinja2.StrictUndefined,
                         autoescape=False)

default_ctx = {}
default_ctx["merchant_blog_url"] = os.environ.get("TALER_ENV_URL_MERCHANT_BLOG", "#")
default_ctx["merchant_donations_url"] = os.environ.get("TALER_ENV_URL_MERCHANT_DONATIONS", "#")
default_ctx["intro_url"] = os.environ.get("TALER_ENV_URL_INTRO", "#")
default_ctx["bank_url"] = os.environ.get("TALER_ENV_URL_BANK", "#")
default_ctx["auditor_url"] = os.environ.get("TALER_ENV_URL_AUDITOR", "#")
default_ctx["currency"] = os.environ.get("TALER_CONFIG_CURRENCY", "??")
auditor_priv_file = os.path.expanduser("~/.local/share/taler/auditor/offline-keys/auditor.priv")
default_ctx["auditor_pub"] = subprocess.check_output(["gnunet-ecc", "-p", auditor_priv_file]).decode("utf-8").strip()


langs_full = {"en": "English" }

for in_file in glob.glob("*.j2"):
    name, ext = re.match(r"(.*)\.([^.]+)$", in_file.rstrip(".j2")).groups()
    tmpl = env.get_template(in_file)

    def self_localized(other_locale):
        """
        Return URL for the current page in another locale.
        """
        return "../" + other_locale + "/" + in_file.rstrip(".j2")

    def url_localized(filename):
        return "../" + locale + "/" + filename

    def svg_localized(filename):
        lf = filename + "." + locale + ".svg"
        if "en" == locale or not os.path.isfile (lf):
            return "../" + filename + ".svg"
        else:
            return "../" + lf

    def url(x):
        # TODO: look at the app root environment variable
        # TODO: check if file exists
        return "../" + x

    for l in glob.glob("locale/*/"):
        locale = os.path.basename(l[:-1])

        tr = gettext.translation("messages",
                                 localedir="locale",
                                 languages=[locale])

        tr.gettext = i18nfix.wrap_gettext(tr.gettext)

        env.install_gettext_translations(tr, newstyle=True)

        ctx = dict(lang=locale,
                   lang_full=langs_full[locale],
                   url=url,
                   self_localized=self_localized,
                   url_localized=url_localized,
                   svg_localized=svg_localized,
                   filename=name + "." + ext)
        ctx.update(default_ctx)
        content = tmpl.render(**ctx)

        out_name = "./" + locale + "/" + in_file.rstrip(".j2")
        os.makedirs("./" + locale, exist_ok=True)
        with codecs.open(out_name, "w", "utf-8") as f:
            f.write(content)