diff --git a/doc/documentation_importer.py b/doc/documentation_importer.py index 9210a28a..f9b42c6f 100644 --- a/doc/documentation_importer.py +++ b/doc/documentation_importer.py @@ -1,28 +1,27 @@ # -*- coding: utf-8 -*- -from codecs import open """ This script converts the hold documentation (saved in markdown files) in a python file with a list of strings to translate it using gettext.""" def prepare_documentation_in_file(fileSource, fileDest): - """ This takes documentation written in a markdown file and put all the contents in a python file, to create a translatable documentation. - @fileSource str: A markdown(.md) file. - @fileDest str: A file where this will put the new strings""" + """ This takes documentation written in a markdown file and put all the contents in a python file, to create a translatable documentation. + @fileSource str: A markdown(.md) file. + @fileDest str: A file where this will put the new strings""" - f1 = open(fileSource, "r", encoding="utf-8") - f2 = open(fileDest, "w", encoding="utf-8") - lns = f1.readlines() - f2.write("# -*- coding: utf-8 -*-\n") - f2.write("documentation = [\n") - for i in lns: - if "\n" == i: - newvar = "\"\"," - elif "\n" == i[-1]: - newvar = "\"\"\"%s\"\"\",\n" % (i[:-1]) - else: - newvar = "\"\"\"%s\"\"\",\n" % (i) - f2.write(newvar) - f1.close() - f2.write("]") - f2.close() + f1 = open(fileSource, "r", encoding="utf-8") + f2 = open(fileDest, "w", encoding="utf-8") + lns = f1.readlines() + f2.write("# -*- coding: utf-8 -*-\n") + f2.write("documentation = [\n") + for i in lns: + if "\n" == i: + newvar = "\"\",\n" + elif "\n" == i[-1]: + newvar = "_(\"\"\"%s\"\"\"),\n" % (i[:-1]) + else: + newvar = "_(\"\"\"%s\"\"\"),\n" % (i) + f2.write(newvar) + f1.close() + f2.write("]") + f2.close() prepare_documentation_in_file("manual.md", "strings.py") diff --git a/doc/generator.py b/doc/generator.py index b48374ad..01b03432 100644 --- a/doc/generator.py +++ b/doc/generator.py @@ -5,63 +5,83 @@ import locale import paths import markdown import shutil -from codecs import open as _open from importlib import reload -def get_translation_function(name, language): - if language == "en": - return gettext.NullTranslations() - translation_function = gettext.translation(name, os.path.join(paths.app_path(), "locales"), languages=[language]) - return translation_function +# Languages already translated or translating the documentation. +documentation_languages = ["en", "es", "fr", "de", "it", "gl", "ja", "ru", "ro", "eu", "ca", "da", "sr"] -# the list of supported language codes of TW Blue -languages = ["en", "es", "fr", "de", "it", "gl", "ja", "ru", "ro", "eu", "ca", "da", "sr"] -def generate_document(language, document_type="documentation"): - if document_type == "documentation": - translation_file = "twblue-documentation" - translation_function = get_translation_function(translation_file, language) - markdown_file = markdown.markdown("\n".join([translation_function.gettext(s[:-1]) if s != "\n" else s for s in strings.documentation[1:]]), extensions=["markdown.extensions.toc"]) - title = translation_function.gettext(strings.documentation[0][:-1]) - filename = "manual.html" - elif document_type == "changelog": - translation_file = "twblue-changelog" - translation_function = get_translation_function(translation_file, language) - markdown_file = markdown.markdown("\n".join([translation_function.gettext(s[:-1]) if s != "\n" else s for s in changelog.documentation[1:]]), extensions=["markdown.extensions.toc"]) - title = translation_function.gettext(changelog.documentation[0][:-1]) - filename = "changelog.html" - first_html_block = """ - - - %s - - - -

%s

- """ % (language, title, title) - first_html_block = first_html_block+ markdown_file - first_html_block = first_html_block + "\n\n" - if not os.path.exists(os.path.join("documentation", language)): - os.mkdir(os.path.join("documentation", language)) - mdfile = _open(os.path.join("documentation", language, filename), "w", encoding="utf-8") - mdfile.write(first_html_block) - mdfile.close() +# Changelog translated languages. +changelog_languages = ["en", "ca", "de", "es", "eu", "fr", "gl", "ja", "ro", "ru", "sr"] + +# this function will help us to have both strings.py and changelog.py without issues by installing a global dummy translation function. +def install_null_translation(name): + _ = gettext.NullTranslations() + _.install() + return + +def get_translations(name): + """ Create translation instances for every language of the translated document. """ + translations = {} + if "documentation" in name: + langs = documentation_languages + else: + langs = changelog_languages + for l in langs: + if l != "en": + _ = gettext.translation(name, os.path.join(paths.app_path(), "locales"), languages=[l]) + translations[l] = _ + else: + _ = gettext.NullTranslations() + translations[l] = _ + return translations + +def generate_document(lang, lang_name, document_type="documentation"): + """ Generates a document by using the provided lang object, which should be a translation, and lang_name, which should be the two letter code representing the language. """ + if document_type == "documentation": + translation_file = "twblue-documentation" + markdown_file = markdown.markdown("\n".join([lang.gettext(s) if s != "" else s for s in strings.documentation[1:]]), extensions=["markdown.extensions.toc"]) + title = lang.gettext(strings.documentation[0]) + filename = "manual.html" + elif document_type == "changelog": + translation_file = "twblue-changelog" + markdown_file = markdown.markdown("\n".join([lang.gettext(s) if s != "" else s for s in changelog.documentation[1:]]), extensions=["markdown.extensions.toc"]) + title = lang.gettext(changelog.documentation[0]) + filename = "changelog.html" + first_html_block = """ + + + %s + + + +

%s

+ """ % (lang_name, title, title) + first_html_block = first_html_block+ markdown_file + first_html_block = first_html_block + "\n\n" + if not os.path.exists(os.path.join("documentation", lang_name)): + os.mkdir(os.path.join("documentation", lang_name)) + mdfile = open(os.path.join("documentation", lang_name, filename), "w", encoding="utf-8") + mdfile.write(first_html_block) + mdfile.close() def create_documentation(): - print("Creating documentation in the supported languages...\n") - if not os.path.exists("documentation"): - os.mkdir("documentation") - if os.path.exists(os.path.join("documentation", "license.txt")) == False: - shutil.copy(os.path.join("..", "license.txt"), os.path.join("documentation", "license.txt")) - for i in languages: - print("Creating documentation for: %s" % (i,)) - try: - generate_document(i) - generate_document(i, "changelog") - except: - continue - print("Done") + changelog_translations = get_translations("twblue-changelog") + documentation_translations = get_translations("twblue-documentation") + print("Creating documentation in the supported languages...\n") + if not os.path.exists("documentation"): + os.mkdir("documentation") + if os.path.exists(os.path.join("documentation", "license.txt")) == False: + shutil.copy(os.path.join("..", "license.txt"), os.path.join("documentation", "license.txt")) + for i in documentation_languages: + print("Creating documentation for: %s" % (i,)) + generate_document(lang_name=i, lang=documentation_translations.get(i)) + for i in changelog_languages: + print("Creating changelog for: %s" % (i,)) + generate_document(lang_name=i, lang=changelog_translations.get(i), document_type="changelog") + print("Done") +install_null_translation("twblue-documentation") import strings import changelog create_documentation() \ No newline at end of file