From cf68b524a84e53bf46ac5d61d8539785918b4b5d Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Fri, 31 Dec 2021 18:21:44 -0600 Subject: [PATCH] Updated documentation generation, now translations should work again --- changelog.md | 2 +- doc/generator.py | 115 ++++++++++++++++++++++++++++------------------- doc/manual.md | 2 +- 3 files changed, 71 insertions(+), 48 deletions(-) diff --git a/changelog.md b/changelog.md index 40dd769..12822e7 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,4 @@ -# Changelog +Changelog ## News in this version diff --git a/doc/generator.py b/doc/generator.py index 1f4341c..024bd0e 100644 --- a/doc/generator.py +++ b/doc/generator.py @@ -4,59 +4,82 @@ import os import locale import markdown import shutil -from codecs import open as _open from importlib import reload -def change_language(name, language): - global _ - os.environ["lang"] = language - _ = gettext.install(name, os.path.join(os.getcwd(), "locales")) +# Languages already translated or translating the documentation. +documentation_languages = ["ru", "en", "es"] -languages = ["en", "ru"] +# Changelog translated languages. +changelog_languages = ["ru", "en", "es"] -def generate_document(language, document_type="documentation"): - translation_file = "socializer-documentation" - change_language(translation_file, language) - if document_type == "documentation": - reload(strings) - markdown_file = markdown.markdown("\n".join(strings.documentation[1:]), extensions=["markdown.extensions.toc"]) - title = strings.documentation[0][1:] - filename = "manual.html" - elif document_type == "changelog": - reload(changelog) - markdown_file = markdown.markdown("\n".join(changelog.documentation[1:]), extensions=["markdown.extensions.toc"]) - title = 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() +# 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(os.getcwd(), "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 = "socializer-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 = "socializer-documentation" + 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,)) - generate_document(i) - generate_document(i, "changelog") - print("Done") + changelog_translations = get_translations("socializer-documentation") + documentation_translations = get_translations("socializer-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") -change_language("socializer-documentation", "en") +install_null_translation("twblue-documentation") import strings import changelog create_documentation() \ No newline at end of file diff --git a/doc/manual.md b/doc/manual.md index 07a1fe7..ccf9f8d 100644 --- a/doc/manual.md +++ b/doc/manual.md @@ -1,4 +1,4 @@ -# Socializer's manual +Socializer's manual ## Introduction