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
-
-
-
-
- """ % (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
+
+
+
+
+ """ % (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