From 020fd0305248def48a8109a61eb5c6656931a50c Mon Sep 17 00:00:00 2001 From: langfr Date: Fri, 23 May 2025 12:36:01 +0100 Subject: [PATCH] Re-Initialize the HTML-template on language change. Handle templates in an language based map for switching language. --- .../ZUGFeRD/ZUGFeRDVisualizer.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java index d4f280a9..53144a65 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java @@ -46,6 +46,8 @@ import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import java.io.*; import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; @@ -77,7 +79,7 @@ public class ZUGFeRDVisualizer { private Templates mXsltXRTemplate = null; private Templates mXsltUBLTemplate = null; private Templates mXsltCIOTemplate = null; - private Templates mXsltHTMLTemplate = null; + private Map mXsltHTMLTemplates = null; private Templates mXsltPDFTemplate = null; private Templates mXsltZF1HTMLTemplate = null; @@ -179,7 +181,7 @@ public class ZUGFeRDVisualizer { Optional in = copyStream(htmlOutput); ByteArrayOutputStream htmlOutStream = new ByteArrayOutputStream(); if (in.isPresent()) { - applyXSLTToHTML(in.get(), htmlOutStream); + applyXSLTToHTML(in.get(), htmlOutStream, lang); } return htmlOutStream.toString(StandardCharsets.UTF_8); @@ -222,9 +224,12 @@ public class ZUGFeRDVisualizer { new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/cii-xr.xsl"))); } - if (mXsltHTMLTemplate == null) { - mXsltHTMLTemplate = mFactory.newTemplates(new StreamSource( - CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/xrechnung-html." + lang.name().toLowerCase() + ".xsl"))); + if (mXsltHTMLTemplates == null) { + mXsltHTMLTemplates = new HashMap<>(); + if (mXsltHTMLTemplates.get(lang) == null) { + Templates mXsltHTMLTemplate = mFactory.newTemplates(new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/xrechnung-html." + lang.name().toLowerCase() + ".xsl"))); + mXsltHTMLTemplates.put(lang, mXsltHTMLTemplate); + } } if (mXsltZF1HTMLTemplate == null) { mXsltZF1HTMLTemplate = mFactory.newTemplates(new StreamSource( @@ -442,9 +447,9 @@ public class ZUGFeRDVisualizer { transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream)); } - protected void applyXSLTToHTML(final InputStream xmlFile, final OutputStream htmlOutStream) + protected void applyXSLTToHTML(final InputStream xmlFile, final OutputStream htmlOutStream, Language lang) throws TransformerException, IOException { - Transformer transformer = mXsltHTMLTemplate.newTransformer(); + Transformer transformer = mXsltHTMLTemplates.get(lang).newTransformer(); transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream)); xmlFile.close();