# HG changeset patch # User Edouard Tisserant # Date 1611311437 -3600 # Node ID 6da94ec043251e31469cbb7f059a66237839e1d9 # Parent 77cfbf1aacf0320f8daf33072b33d98d715e1b9f SVGHMI: i18n: finished passing back translated messaged to xslt proc, finished template to generate corresponding javascript literals. diff -r 77cfbf1aacf0 -r 6da94ec04325 svghmi/gen_index_xhtml.xslt --- a/svghmi/gen_index_xhtml.xslt Fri Jan 22 08:43:24 2021 +0100 +++ b/svghmi/gen_index_xhtml.xslt Fri Jan 22 11:30:37 2021 +0100 @@ -264,7 +264,9 @@ <xsl:value-of select="."/> <xsl:text>" </xsl:text> </xsl:for-each> - <xsl:text> + <xsl:text> [</xsl:text> + <xsl:value-of select="text()"/> + <xsl:text>] </xsl:text> <xsl:apply-templates mode="testtree" select="*"> <xsl:with-param name="indent"> @@ -959,23 +961,43 @@ <xsl:text> </xsl:text> <xsl:variable name="translations" select="ns:GetTranslations($translatable_strings)"/> - <xsl:text>var translations = { -</xsl:text> - <xsl:for-each select="$translations/*"> - <xsl:text> "</xsl:text> - <xsl:value-of select="local-name()"/> - <xsl:text>":{ -</xsl:text> - <xsl:text> }</xsl:text> + <xsl:text>var langs = [</xsl:text> + <xsl:for-each select="$translations/langs/lang"> + <xsl:value-of select="."/> + <xsl:if test="position()!=last()"> + <xsl:text>,</xsl:text> + </xsl:if> + </xsl:for-each> + <xsl:text>]; +</xsl:text> + <xsl:text>var translations = [ +</xsl:text> + <xsl:for-each select="$translatable_texts"> + <xsl:variable name="n" select="position()"/> + <xsl:text> ["</xsl:text> + <xsl:value-of select="@id"/> + <xsl:text>",[</xsl:text> + <xsl:for-each select="$translations/messages/msgid[$n]/msg"> + <xsl:text>"</xsl:text> + <xsl:for-each select="line"> + <xsl:value-of select="."/> + <xsl:if test="position()!=last()"> + <xsl:text>\n</xsl:text> + </xsl:if> + </xsl:for-each> + <xsl:text>"</xsl:text> + <xsl:if test="position()!=last()"> + <xsl:text>,</xsl:text> + </xsl:if> + </xsl:for-each> + <xsl:text>]]</xsl:text> <xsl:if test="position()!=last()"> <xsl:text>,</xsl:text> </xsl:if> <xsl:text> </xsl:text> </xsl:for-each> - <xsl:text>}; -</xsl:text> - <xsl:text> + <xsl:text>] </xsl:text> <xsl:text> </xsl:text> diff -r 77cfbf1aacf0 -r 6da94ec04325 svghmi/i18n.py --- a/svghmi/i18n.py Fri Jan 22 08:43:24 2021 +0100 +++ b/svghmi/i18n.py Fri Jan 22 11:30:37 2021 +0100 @@ -106,20 +106,23 @@ def TranslationToEtree(langs,translated_messages): - langsroot = etree.Element("langs") + result = etree.Element("translations") + + langsroot = etree.SubElement(result, "langs") for lang in langs: langel = etree.SubElement(langsroot, "lang") langel.text = lang - msgsroot = etree.Element("translations") + msgsroot = etree.SubElement(result, "messages") for msgid, msgs in translated_messages: msgidel = etree.SubElement(msgsroot, "msgid") - msgidel.text = msgid for msg in msgs: msgel = etree.SubElement(msgidel, "msg") - msgel.text = msg - - return [langsroot,msgsroot] + for line in msg.split("\n"): + lineel = etree.SubElement(msgel, "line") + lineel.text = escape(line.encode("utf-8")).decode("utf-8") + + return result diff -r 77cfbf1aacf0 -r 6da94ec04325 svghmi/i18n.ysl2 --- a/svghmi/i18n.ysl2 Fri Jan 22 08:43:24 2021 +0100 +++ b/svghmi/i18n.ysl2 Fri Jan 22 11:30:37 2021 +0100 @@ -20,13 +20,28 @@ emit "preamble:i18n" { const "translations", "ns:GetTranslations($translatable_strings)"; - | var translations = { - foreach "$translations/*" { - | "«local-name()»":{ - /* TODO */ - | }`if "position()!=last()" > ,` + > var langs = [ + foreach "$translations/langs/lang" { + value "."; + if "position()!=last()" > , } - | }; - | - + | ]; + | var translations = [ + foreach "$translatable_texts" { + const "n","position()"; + > ["«@id»",[ + foreach "$translations/messages/msgid[$n]/msg" { + > " + foreach "line" { + value "."; + if "position()!=last()" > \\\\n + } + > " + if "position()!=last()" > , + } + > ]] + if "position()!=last()" > , + > \n + } + | ] }