diff build_website.py @ 49:d3b943ac148f

Add translations Build script + {% trans %} in index.html
author mathieui
date Sat, 23 May 2020 20:33:38 +0200
parents
children 78f3f79c911b
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/build_website.py
@@ -0,0 +1,91 @@
+#!/usr/bin/env python3
+'''Locale build script for XAM'''
+
+import sys
+from os import makedirs, path
+from django.conf import settings
+from shutil import copytree, copy
+
+AVAILABLE_LANGUAGES = ['en', 'fr']
+
+
+def make_messages():
+    '''Extract translatable strings from the template.'''
+
+    from django.core.management.commands import makemessages
+
+    command = makemessages.Command()
+    command.stdout = sys.stdout
+    command.handle(
+        locale=AVAILABLE_LANGUAGES, exclude=[], domain='django', verbosity=True,
+        all=True, extensions=['xhtml', 'js'], symlinks=False, ignore_patterns=[],
+        use_default_ignore_patterns=True, no_wrap=True, no_location=True,
+        no_obsolete=True, keep_pot=True, add_location=False
+    )
+
+
+def compile_messages():
+    '''For each locale we support, compile the po file into a mo.'''
+
+    from django.core.management.commands import compilemessages
+
+    command = compilemessages.Command()
+    command.verbosity = 1
+    command.stdout = sys.stdout
+    command.compile_messages(('locale/%s/LC_MESSAGES' % lang, 'django.po')
+                             for lang in AVAILABLE_LANGUAGES)
+
+
+def main():
+    '''Call everything in the correct order.'''
+
+    from subprocess import call
+
+    settings.configure()
+    make_messages()
+    compile_messages()
+
+    for language in AVAILABLE_LANGUAGES:
+        call([sys.argv[0], language])
+
+
+def generate_pages(language):
+    '''Write a single page, and gzip it for lower network usage.'''
+
+    assert language in AVAILABLE_LANGUAGES
+    target_dir = path.join('.', 'build', language)
+    makedirs(target_dir, exist_ok=True)
+
+    import django
+    from django.template import Template, Context
+    import gzip
+
+    settings.configure(LANGUAGE_CODE=language, LOCALE_PATHS=['locale'], TEMPLATES=[{'BACKEND': 'django.template.backends.django.DjangoTemplates'}])
+
+    django.setup()
+
+    static = ['share', 'prosody.css', 'prosody.svg', 'spinner.svg', 'ok.svg', 'error.svg']
+    files = [
+        'index.xhtml', 'client.js', 'roster.js', 'avatar.js', 'client.js', 'index.xhtml',
+        'mam.js', 'nickname.js', 'pep.js', 'roster.js', 'strophe.js', 'strophe.mam.js',
+        'strophe.rsm.js', 'util.js', 'vcard.js'
+    ]
+    for file_to_localize in files:
+        with open(file_to_localize) as template_file:
+            template = Template(template_file.read())
+        rendered = template.render(Context({'AVAILABLE_LANGUAGES':
+                                            AVAILABLE_LANGUAGES}))
+        filename = path.join(target_dir, file_to_localize)
+        with open(filename, 'w') as out:
+            out.write(rendered)
+    for static_resource in static:
+        if path.isdir(static_resource):
+            copytree(static_resource, target_dir, dirs_exist_ok=True)
+        else:
+            copy(static_resource, target_dir)
+
+if __name__ == '__main__':
+    if len(sys.argv) == 1:
+        main()
+    else:
+        generate_pages(sys.argv[1])