From 2feba3ffb6d16bc0ccfc334454a81774e0dff94f Mon Sep 17 00:00:00 2001
From: Volker Schukai <volker.schukai@schukai.com>
Date: Thu, 9 Feb 2023 15:49:02 +0100
Subject: [PATCH] feat: consider json translations

---
 application/source/command.go                 |  6 +-
 application/source/go.mod                     | 11 ++-
 application/source/go.sum                     | 39 +-------
 application/source/html/cut.go                |  2 +-
 application/source/html/generate.go           | 15 ++-
 application/source/html/sync.go               |  2 +-
 application/source/template/prepare.go        | 51 +++++++++-
 application/source/types/page-data.go         | 21 +++--
 .../examples/example1/html/de/test1.html      | 87 +++++++++++++++++
 .../examples/example1/html/en/test2.html      | 69 ++++++++++++++
 .../examples/example1/html/en/test3.html      | 69 ++++++++++++++
 development/examples/example1/html/test.html  |  1 +
 .../examples/example1/original/test1.html     | 12 +++
 .../examples/example1/template/data.yaml      | 94 +++++++++++++++++--
 .../examples/example1/template/test1.html     | 83 ++++++++++++++++
 .../examples/example1/template/test2.html     | 71 ++++++++++++++
 .../examples/example1/template/test3.html     | 71 ++++++++++++++
 17 files changed, 644 insertions(+), 60 deletions(-)
 create mode 100644 development/examples/example1/html/de/test1.html
 create mode 100644 development/examples/example1/html/en/test2.html
 create mode 100644 development/examples/example1/html/en/test3.html
 create mode 100644 development/examples/example1/template/test1.html
 create mode 100644 development/examples/example1/template/test2.html
 create mode 100644 development/examples/example1/template/test3.html

diff --git a/application/source/command.go b/application/source/command.go
index 780eaae..7885063 100644
--- a/application/source/command.go
+++ b/application/source/command.go
@@ -2,9 +2,9 @@ package main
 
 import (
 	"fmt"
-	html2 "gitlab.schukai.com/oss/bob.git/html"
-	template2 "gitlab.schukai.com/oss/bob.git/template"
-	"gitlab.schukai.com/oss/bob.git/types"
+	html2 "gitlab.schukai.com/oss/bob/html"
+	template2 "gitlab.schukai.com/oss/bob/template"
+	"gitlab.schukai.com/oss/bob/types"
 	"gitlab.schukai.com/oss/libraries/go/application/xflags"
 	"gopkg.in/yaml.v3"
 	"os"
diff --git a/application/source/go.mod b/application/source/go.mod
index e1fd6bb..7a68da1 100644
--- a/application/source/go.mod
+++ b/application/source/go.mod
@@ -1,13 +1,14 @@
-module gitlab.schukai.com/oss/bob.git
+module gitlab.schukai.com/oss/bob
 
-go 1.19
+
+go 1.20
 
 require (
 	github.com/andybalholm/cascadia v1.3.1
 	gitlab.schukai.com/oss/libraries/go/application/xflags v1.13.2
 	gitlab.schukai.com/oss/libraries/go/markup/html v0.3.0
-	golang.org/x/crypto v0.4.0
-	golang.org/x/net v0.4.0
+	golang.org/x/crypto v0.6.0
+	golang.org/x/net v0.6.0
 	gopkg.in/yaml.v3 v3.0.1
 )
 
@@ -28,7 +29,7 @@ require (
 	gitlab.schukai.com/oss/libraries/go/utilities/data.git v0.2.0 // indirect
 	gitlab.schukai.com/oss/libraries/go/utilities/pathfinder v0.5.2 // indirect
 	golang.org/x/exp v0.0.0-20221023144134-a1e5550cf13e // indirect
-	golang.org/x/sys v0.3.0 // indirect
+	golang.org/x/sys v0.5.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
 	google.golang.org/protobuf v1.28.1 // indirect
 )
diff --git a/application/source/go.sum b/application/source/go.sum
index 3ac2f3d..281ce45 100644
--- a/application/source/go.sum
+++ b/application/source/go.sum
@@ -1,24 +1,16 @@
 github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
 github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
 github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
 github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
-github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
 github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
-github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg=
 github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/r3labs/diff/v3 v3.0.0 h1:ZhPwNxn9gW5WLPBV9GCYaVbMdLOSmJ0DeKdCiSbOLUI=
 github.com/r3labs/diff/v3 v3.0.0/go.mod h1:wCkTySAiDnZao1sZrVTDIzuzgLZ+cNPGn3LC8DlIg5g=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
@@ -26,53 +18,34 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE
 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
 github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
 github.com/volker-schukai/tokenizer v1.0.0 h1:wF4haFoCodq7lgAk8c+th/DZmpFpL2WVD8wDzAGU1mA=
 github.com/volker-schukai/tokenizer v1.0.0/go.mod h1:LPw7lLIxUnZgeg96818N7IvwLE1x8ya31J/Aa0aCq9M=
-gitlab.schukai.com/oss/libraries/go/application/configuration v1.14.0 h1:cuS7BxTe5pS5iUD6eJKNcErRx6NHGNAGeZx8tOED9pk=
 gitlab.schukai.com/oss/libraries/go/application/configuration v1.14.0/go.mod h1:me1BS/adhucf6h8t2ew0ifaNVio2vunQIYfpofUBbF8=
-gitlab.schukai.com/oss/libraries/go/application/xflags v1.13.0 h1:nTnuGzAOzUTlmrst8tPrLp5EFOwC+6vozsxOcnGVfQk=
-gitlab.schukai.com/oss/libraries/go/application/xflags v1.13.0/go.mod h1:EEYPy5RYR4ahK9J6CTKSLFHUhP+ndHBWVdQMtGCFqDo=
 gitlab.schukai.com/oss/libraries/go/application/xflags v1.13.2 h1:3nRDFUs629qL8EGxeX3gzNUqIR/04uUvXiW0G7qJ8Jk=
 gitlab.schukai.com/oss/libraries/go/application/xflags v1.13.2/go.mod h1:EEYPy5RYR4ahK9J6CTKSLFHUhP+ndHBWVdQMtGCFqDo=
-gitlab.schukai.com/oss/libraries/go/markup/html v0.2.1 h1:d08SBGYHXHWOCJqaLh1Cfh6rOYmHoRJxM63GhF2klCo=
-gitlab.schukai.com/oss/libraries/go/markup/html v0.2.1/go.mod h1:h0+dJUwXfF1QeaBxFiidgxA2I3A9qIPE+zhfs88pKV8=
 gitlab.schukai.com/oss/libraries/go/markup/html v0.3.0 h1:RvEQgV6yj8M1SjmR/FZwmwykfJSbHrDk8m7IIlujhxY=
 gitlab.schukai.com/oss/libraries/go/markup/html v0.3.0/go.mod h1:h0+dJUwXfF1QeaBxFiidgxA2I3A9qIPE+zhfs88pKV8=
-gitlab.schukai.com/oss/libraries/go/network/http-negotiation v1.3.0 h1:SZG0BW5ll3WK5ZIOTogjqX8oVHCTxANTDLPxUs7Rnx8=
 gitlab.schukai.com/oss/libraries/go/network/http-negotiation v1.3.0/go.mod h1:RS2rKf5O+rmSBshHLOgjG7dxg5N2MhNYokZOBcuXdX8=
 gitlab.schukai.com/oss/libraries/go/utilities/data.git v0.2.0 h1:JVxMHiA8zFVjJDhNl65XeYrhdMkzB+5dyrBUEZ982WU=
 gitlab.schukai.com/oss/libraries/go/utilities/data.git v0.2.0/go.mod h1:BsR4Y9jsvISplkW6UoLFRGxQX69/AUmP1SXRwWhx31o=
-gitlab.schukai.com/oss/libraries/go/utilities/pathfinder v0.3.1 h1:oyElaqEiyr2XgaE1CYwD8LoeHsuR/vQD/p6k3jYbJFs=
-gitlab.schukai.com/oss/libraries/go/utilities/pathfinder v0.3.1/go.mod h1:UvdD4NAf3gLKYafabJD7e9ZCOetzM9JZ9y4GkZukPVU=
-gitlab.schukai.com/oss/libraries/go/utilities/pathfinder v0.5.0 h1:LsKHjuiEzOS3W5UqtqLmHEDYGVQ7qddf88rmD1HmI4M=
-gitlab.schukai.com/oss/libraries/go/utilities/pathfinder v0.5.0/go.mod h1:UvdD4NAf3gLKYafabJD7e9ZCOetzM9JZ9y4GkZukPVU=
 gitlab.schukai.com/oss/libraries/go/utilities/pathfinder v0.5.2 h1:R+dL2NJCM+AQNPK4DPDmfvx1eomi1Xb1dl0XKEFj7Ek=
 gitlab.schukai.com/oss/libraries/go/utilities/pathfinder v0.5.2/go.mod h1:UvdD4NAf3gLKYafabJD7e9ZCOetzM9JZ9y4GkZukPVU=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8=
-golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80=
-golang.org/x/exp v0.0.0-20221023144134-a1e5550cf13e h1:SkwG94eNiiYJhbeDE018Grw09HIN/KB9NlRmZsrzfWs=
+golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
+golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
 golang.org/x/exp v0.0.0-20221023144134-a1e5550cf13e/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0=
-golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
-golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
-golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU=
-golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
+golang.org/x/net v0.6.0 h1:L4ZwwTvKW9gr0ZMS1yrHD9GZhIuVjOBBnaKH+SPQK0Q=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
-golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
@@ -80,11 +53,9 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
 google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
 google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/application/source/html/cut.go b/application/source/html/cut.go
index 7f0bfe3..00f9b8d 100644
--- a/application/source/html/cut.go
+++ b/application/source/html/cut.go
@@ -2,7 +2,7 @@ package html
 
 import (
 	"github.com/andybalholm/cascadia"
-	"gitlab.schukai.com/oss/bob.git/types"
+	"gitlab.schukai.com/oss/bob/types"
 	"gitlab.schukai.com/oss/libraries/go/markup/html/engine"
 	"golang.org/x/net/html"
 	"gopkg.in/yaml.v3"
diff --git a/application/source/html/generate.go b/application/source/html/generate.go
index 0739aa7..32a0dd7 100644
--- a/application/source/html/generate.go
+++ b/application/source/html/generate.go
@@ -1,7 +1,8 @@
 package html
 
 import (
-	"gitlab.schukai.com/oss/bob.git/types"
+	"encoding/json"
+	"gitlab.schukai.com/oss/bob/types"
 	"gitlab.schukai.com/oss/libraries/go/markup/html/engine"
 	"gopkg.in/yaml.v3"
 	"os"
@@ -81,6 +82,18 @@ func Generate(data *types.PageData, name string) (string, error) {
 		dataset["text"].(map[any]any)[v.Id] = map[any]any{"text": v.Text}
 	}
 
+	dataset["translations"] = make(map[string]any, 0)
+	for _, v := range data.Translations {
+		j, err := json.Marshal(v.KeyValues)
+		if err != nil {
+			return "", err
+		}
+		dataset["translations"].(map[string]any)[v.Id] = map[string]string{
+			"content": string(j),
+		}
+
+	}
+
 	e := engine.New(dataset)
 
 	template, err := os.ReadFile(name)
diff --git a/application/source/html/sync.go b/application/source/html/sync.go
index a15aabd..1784580 100644
--- a/application/source/html/sync.go
+++ b/application/source/html/sync.go
@@ -3,7 +3,7 @@ package html
 import (
 	"fmt"
 	"github.com/andybalholm/cascadia"
-	"gitlab.schukai.com/oss/bob.git/types"
+	"gitlab.schukai.com/oss/bob/types"
 	"gitlab.schukai.com/oss/libraries/go/markup/html/engine"
 	"golang.org/x/net/html"
 	"gopkg.in/yaml.v3"
diff --git a/application/source/template/prepare.go b/application/source/template/prepare.go
index 1afea22..6da81c0 100644
--- a/application/source/template/prepare.go
+++ b/application/source/template/prepare.go
@@ -1,9 +1,11 @@
 package template
 
 import (
+	"encoding/json"
+	"fmt"
 	"github.com/andybalholm/cascadia"
-	"gitlab.schukai.com/oss/bob.git/types"
-	"gitlab.schukai.com/oss/bob.git/util"
+	"gitlab.schukai.com/oss/bob/types"
+	"gitlab.schukai.com/oss/bob/util"
 	"golang.org/x/net/html"
 	"golang.org/x/net/html/atom"
 	"path"
@@ -215,6 +217,49 @@ func prepareImages(node *html.Node, storage *types.PageData) {
 
 }
 
+func prepareTranslationJson(node *html.Node, storage *types.PageData) {
+	selector, err := cascadia.Parse("script[data-monster-role=translation]")
+	if err != nil {
+		return
+	}
+
+	list := cascadia.QueryAll(node, selector)
+	if list == nil {
+		return
+	}
+
+	for _, n := range list {
+
+		id := util.GetAttribute(n.Attr, "id")
+		typ := util.GetAttribute(n.Attr, "type")
+
+		n.Attr = removeAttribute(n.Attr, attributeReplace)
+		n.Attr = append(n.Attr, html.Attribute{Key: attributeReplace, Val: "path:translations." + id + ".content"})
+
+		content := ""
+		for c := n.FirstChild; c != nil; c = c.NextSibling {
+			if c.Type == html.TextNode {
+				content += c.Data
+			}
+		}
+
+		content = strings.TrimSpace(content)
+
+		t := make(map[string]any)
+		err := json.Unmarshal([]byte(content), &t)
+		if err != nil {
+			fmt.Println(err)
+		}
+
+		storage.Translations = append(storage.Translations, types.Translations{
+			Id:        id,
+			Type:      typ,
+			KeyValues: t,
+		})
+
+	}
+}
+
 func prepareTextNodes(node *html.Node, storage *types.PageData) {
 
 	selector, err := cascadia.Parse("body")
@@ -307,6 +352,8 @@ func PrepareHtmlFile(from, to string, storage types.PageDataStorage) error {
 	prepareAnchors(node, pd)
 	prepareTextNodes(node, pd)
 
+	prepareTranslationJson(node, pd)
+
 	pd.Export = path.Join(pd.Lang, path.Base(from))
 	to = path.Join(to, path.Base(from))
 
diff --git a/application/source/types/page-data.go b/application/source/types/page-data.go
index 5113746..18b3fe1 100644
--- a/application/source/types/page-data.go
+++ b/application/source/types/page-data.go
@@ -19,14 +19,21 @@ type Anchor struct {
 	Title    string
 }
 
+type Translations struct {
+	Id        string         `yaml:"id"`
+	Type      string         `yaml:"type"`
+	KeyValues map[string]any `yaml:"translations"`
+}
+
 type PageData struct {
-	Lang    string            `yaml:"lang"`
-	Title   string            `yaml:"title"`
-	Meta    map[string]string `yaml:"meta"`
-	Images  []Image           `yaml:"images"`
-	Anchors []Anchor          `yaml:"anchors"`
-	Text    []Text            `yaml:"text"`
-	Export  string            `yaml:"export"`
+	Export       string            `yaml:"export"`
+	Lang         string            `yaml:"lang"`
+	Title        string            `yaml:"title"`
+	Meta         map[string]string `yaml:"meta"`
+	Images       []Image           `yaml:"images"`
+	Anchors      []Anchor          `yaml:"anchors"`
+	Text         []Text            `yaml:"text"`
+	Translations []Translations    `yaml:"translations"`
 }
 
 func NewPageData() *PageData {
diff --git a/development/examples/example1/html/de/test1.html b/development/examples/example1/html/de/test1.html
new file mode 100644
index 0000000..3ff51ee
--- /dev/null
+++ b/development/examples/example1/html/de/test1.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html lang="de">
+<head>
+
+    <style>
+        *:not(:defined) {
+            visibility: hidden;
+        }
+    </style>
+
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
+
+    <meta name="robots" content="noindex"/>
+
+    <link rel="icon" type="image/x-icon" href="/asset/icon/favicon.svg"/>
+    <meta name="theme-color" content="#c10000"/>
+    <link rel="apple-touch-icon" sizes="180x180" href="/asset/icon/apple-touch-icon.png"/>
+    <link rel="icon" type="image/png" sizes="32x32" href="/asset/icon/favicon-32x32.png"/>
+    <link rel="icon" type="image/png" sizes="16x16" href="/asset/icon/favicon-16x16.png"/>
+    <link rel="mask-icon" href="/asset/icon/safari-pinned-tab.svg" color="#fd1d1d"/>
+    <meta name="msapplication-TileImage" content="/asset/icon/mstile-144x144.png"/>
+    <meta name="msapplication-TileColor" content="#fd1d1d"/>
+
+    <title>TESTx</title>
+    <meta name="description" content="The request was malformed or invalid."/>
+    <meta name="author" content="schukai GmbH"/>
+
+    <link rel="icon" href="/favicon.ico"/>
+    <link rel="icon" href="/favicon.svg" type="image/svg+xml"/>
+    <link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
+
+    <script id="translations" type="application/json" data-monster-role="translation">{
+        "key1": "value1 gfgf66",
+        "key2": "value2 gg",
+        "key3": {
+            "one": "value3 tgtgt",
+            "two": "value4 trzrtz"
+        }
+    }</script>
+
+
+    <script id="mainscript" src="/script/main22.mjs" type="module"></script>
+</head>
+
+<body>
+<header>
+    <div class="gradient"></div>
+</header>
+
+<monster-state>
+    <img width="16" height="16" alt="tick" title="yes" src="data:image/gif;base64,R0lGODdhEAAQAMwAAPj7+FmhUYjNfGuxYYDJdYTIeanOpT+DOTuANXi/bGOrWj6CONzv2sPjv2Cm
+  V1unU4zPgI/Sg6DJnJ3ImTh8Mtbs00aNP1CZSGy0YqLEn47RgXW8amasW7XWsmmvX2iuXiwAAAAAEAAQAAAFVyAgjmRpnihqGCkpDQ
+  PbGkNUOFk6DZqgHCNGg2T4QAQBoIiRSAwBE4VA4FACKgkB5NGReASFZEmxsQ0whPDi9BiACYQAInXhwOUtgCUQoORFCGt/g4QAIQA7"
+         id="tickyesdata-image-gi-4013311193"/>
+    <h1 class="deco">Bad xxxx</h1>
+    <p>The request was incorrect, the server could not process it.</p>
+    <p>
+    </p>
+    <div class="infobox">
+        <div>
+
+            <ul>
+
+                <li>Try submitting your<a id="yes-a-html" href="/a.html" title="Yes" hreflang="">request</a> again
+                    (sometimes this helps).
+                </li>
+                <li>Contact support if you continue to have problems.</li>
+
+                <li>If you received this message as a result of a request to the server API, then check the structure
+                    against the documentation.
+                </li>
+
+
+            </ul>
+
+            <p>You can try the following steps:</p>
+
+        </div>
+    </div>
+
+
+</monster-state>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/development/examples/example1/html/en/test2.html b/development/examples/example1/html/en/test2.html
new file mode 100644
index 0000000..ecd0791
--- /dev/null
+++ b/development/examples/example1/html/en/test2.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html><html lang="en"><head>
+
+    <style>
+        *:not(:defined) {
+            visibility: hidden;
+        }
+    </style>
+
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
+
+    <meta name="robots" content="noindex"/>
+
+    <link rel="icon" type="image/x-icon" href="/asset/icon/favicon.svg"/>
+    <meta name="theme-color" content="#c10000"/>
+    <link rel="apple-touch-icon" sizes="180x180" href="/asset/icon/apple-touch-icon.png"/>
+    <link rel="icon" type="image/png" sizes="32x32" href="/asset/icon/favicon-32x32.png"/>
+    <link rel="icon" type="image/png" sizes="16x16" href="/asset/icon/favicon-16x16.png"/>
+    <link rel="mask-icon" href="/asset/icon/safari-pinned-tab.svg" color="#fd1d1d"/>
+    <meta name="msapplication-TileImage" content="/asset/icon/mstile-144x144.png"/>
+    <meta name="msapplication-TileColor" content="#fd1d1d"/>
+
+    <title>TEST2</title>
+    <meta name="description" content="The 2request was malformed or invalid."/>
+    <meta name="author" content="sch2ukai GmbH"/>
+
+    <link rel="icon" href="/favicon.ico"/>
+    <link rel="icon" href="/favicon.svg" type="image/svg+xml"/>
+    <link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
+
+    <script id="mainscript" src="/script/main22.mjs" type="module"></script>
+</head>
+
+<body>
+<header>
+    <div class="gradient"></div>
+</header>
+
+<monster-state>
+    <img width="16" height="16" alt="tick" title="yes" src="data:image/gif;base64,R0lGODdhEAAQAMwAAPj7+FmhUYjNfGuxYYDJdYTIeanOpT+DOTuANXi/bGOrWj6CONzv2sPjv2Cm
+  V1unU4zPgI/Sg6DJnJ3ImTh8Mtbs00aNP1CZSGy0YqLEn47RgXW8amasW7XWsmmvX2iuXiwAAAAAEAAQAAAFVyAgjmRpnihqGCkpDQ
+  PbGkNUOFk6DZqgHCNGg2T4QAQBoIiRSAwBE4VA4FACKgkB5NGReASFZEmxsQ0whPDi9BiACYQAInXhwOUtgCUQoORFCGt/g4QAIQA7" id="tickyesdata-image-gi-4013311193"/>
+    <h1 class="deco">Bad xxxx</h1>
+    <p>The request was incorrect, the server could not process it.</p><p>
+</p><div class="infobox">
+    <div>
+
+        <ul>
+
+            <li>Try submitting your<a id="yes-a-html" href="/a.html" title="Yes" hreflang="">request</a> again (sometimes this helps).</li>
+            <li>Contact support if you continue to have problems.</li>
+
+            <li>If you received this message as a result of a request to the server API, then check the structure
+                against the documentation.</li>
+
+
+        </ul>
+
+        <p>You   can   try    the following steps:</p>
+        
+    </div>
+</div>
+
+
+</monster-state>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/development/examples/example1/html/en/test3.html b/development/examples/example1/html/en/test3.html
new file mode 100644
index 0000000..a628f9e
--- /dev/null
+++ b/development/examples/example1/html/en/test3.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html><html lang="en"><head>
+
+    <style>
+        *:not(:defined) {
+            visibility: hidden;
+        }
+    </style>
+
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
+
+    <meta name="robots" content="noindex"/>
+
+    <link rel="icon" type="image/x-icon" href="/asset/icon/favicon.svg"/>
+    <meta name="theme-color" content="#c10000"/>
+    <link rel="apple-touch-icon" sizes="180x180" href="/asset/icon/apple-touch-icon.png"/>
+    <link rel="icon" type="image/png" sizes="32x32" href="/asset/icon/favicon-32x32.png"/>
+    <link rel="icon" type="image/png" sizes="16x16" href="/asset/icon/favicon-16x16.png"/>
+    <link rel="mask-icon" href="/asset/icon/safari-pinned-tab.svg" color="#fd1d1d"/>
+    <meta name="msapplication-TileImage" content="/asset/icon/mstile-144x144.png"/>
+    <meta name="msapplication-TileColor" content="#fd1d1d"/>
+
+    <title>TEST3</title>
+    <meta name="description" content="The 3request was malformed or invalid."/>
+    <meta name="author" content="schukai3 GmbH"/>
+
+    <link rel="icon" href="/favicon.ico"/>
+    <link rel="icon" href="/favicon.svg" type="image/svg+xml"/>
+    <link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
+
+    <script id="mainscript" src="/script/main22.mjs" type="module"></script>
+</head>
+
+<body>
+<header>
+    <div class="gradient"></div>
+</header>
+
+<monster-state>
+    <img width="16" height="16" alt="tick" title="yes" src="data:image/gif;base64,R0lGODdhEAAQAMwAAPj7+FmhUYjNfGuxYYDJdYTIeanOpT+DOTuANXi/bGOrWj6CONzv2sPjv2Cm
+  V1unU4zPgI/Sg6DJnJ3ImTh8Mtbs00aNP1CZSGy0YqLEn47RgXW8amasW7XWsmmvX2iuXiwAAAAAEAAQAAAFVyAgjmRpnihqGCkpDQ
+  PbGkNUOFk6DZqgHCNGg2T4QAQBoIiRSAwBE4VA4FACKgkB5NGReASFZEmxsQ0whPDi9BiACYQAInXhwOUtgCUQoORFCGt/g4QAIQA7" id="tickyesdata-image-gi-4013311193"/>
+    <h1 class="deco">Bad xxxx</h1>
+    <p>The request was incorrect, the server could not process it.</p><p>
+</p><div class="infobox">
+    <div>
+
+        <ul>
+
+            <li>Try submitting your<a id="yes-a-html" href="/a.html" title="Yes" hreflang="">request</a> again (sometimes this helps).</li>
+            <li>Contact support if you continue to have problems.</li>
+
+            <li>If you received this message as a result of a request to the server API, then check the structure
+                against the documentation.</li>
+
+
+        </ul>
+
+        <p>You   can   try    the following steps:</p>
+        
+    </div>
+</div>
+
+
+</monster-state>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/development/examples/example1/html/test.html b/development/examples/example1/html/test.html
index b697ce0..0cfe2ec 100644
--- a/development/examples/example1/html/test.html
+++ b/development/examples/example1/html/test.html
@@ -29,6 +29,7 @@
     <link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
 
     <script src="/script/main.mjs" type="module"></script>
+
 </head>
 
 <body>
diff --git a/development/examples/example1/original/test1.html b/development/examples/example1/original/test1.html
index c458fdd..319730b 100644
--- a/development/examples/example1/original/test1.html
+++ b/development/examples/example1/original/test1.html
@@ -28,6 +28,18 @@
     <link rel="icon" href="/favicon.svg" type="image/svg+xml"/>
     <link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
 
+    <script id="translations" type="application/json" data-monster-role="translation">
+        {
+            "key1": "value1",
+            "key2": "value2",
+            "key3": {
+                "one": "value3",
+                "two": "value4"
+            }
+        }
+    </script>
+    
+    
     <script id="mainscript" src="/script/main22.mjs" type="module"></script>
 </head>
 
diff --git a/development/examples/example1/template/data.yaml b/development/examples/example1/template/data.yaml
index 518cba7..09114f2 100755
--- a/development/examples/example1/template/data.yaml
+++ b/development/examples/example1/template/data.yaml
@@ -1,6 +1,7 @@
-test.html:
-    lang: en
-    title: Bad Request
+test1.html:
+    export: de/test1.html
+    lang: de
+    title: TESTx
     meta:
         author: schukai GmbH
         description: The request was malformed or invalid.
@@ -14,12 +15,92 @@ test.html:
           title: "yes"
     anchors:
         - id: yes-a-html
-          href: /b.html
+          href: /a.html
+          hreflang: ""
+          title: "Yes"
+    text:
+        - text: Bad xxxx
+          id: bad-xxxx
+        - text: The request was incorrect, the server could not process it.
+          id: the-request-was-inco-2640993422
+        - text: Try submitting your
+          id: try-submitting-your
+        - text: Contact support if you continue to have problems.
+          id: contact-support-if-y-3404332025
+        - text: |-
+            If you received this message as a result of a request to the server API, then check the structure
+                            against the documentation.
+          id: if-you-received-this-423958995
+        - text: 'You   can   try    the following steps:'
+          id: you-can-try-the-foll-3363859033
+    translations:
+        - id: translations
+          type: application/json
+          translations:
+            key1: value1 gfgf66
+            key2: value2 gg
+            key3:
+                one: value3 tgtgt
+                two: value4 trzrtz
+test2.html:
+    export: en/test2.html
+    lang: en
+    title: TEST2
+    meta:
+        author: sch2ukai GmbH
+        description: The 2request was malformed or invalid.
+    images:
+        - id: tickyesdata-image-gi-4013311193
+          source: |-
+            data:image/gif;base64,R0lGODdhEAAQAMwAAPj7+FmhUYjNfGuxYYDJdYTIeanOpT+DOTuANXi/bGOrWj6CONzv2sPjv2Cm
+              V1unU4zPgI/Sg6DJnJ3ImTh8Mtbs00aNP1CZSGy0YqLEn47RgXW8amasW7XWsmmvX2iuXiwAAAAAEAAQAAAFVyAgjmRpnihqGCkpDQ
+              PbGkNUOFk6DZqgHCNGg2T4QAQBoIiRSAwBE4VA4FACKgkB5NGReASFZEmxsQ0whPDi9BiACYQAInXhwOUtgCUQoORFCGt/g4QAIQA7
+          alt: tick
+          title: "yes"
+    anchors:
+        - id: yes-a-html
+          href: /a.html
+          hreflang: ""
+          title: "Yes"
+    text:
+        - text: Bad xxxx
+          id: bad-xxxx
+        - text: The request was incorrect, the server could not process it.
+          id: the-request-was-inco-2640993422
+        - text: Try submitting your
+          id: try-submitting-your
+        - text: Contact support if you continue to have problems.
+          id: contact-support-if-y-3404332025
+        - text: |-
+            If you received this message as a result of a request to the server API, then check the structure
+                            against the documentation.
+          id: if-you-received-this-423958995
+        - text: 'You   can   try    the following steps:'
+          id: you-can-try-the-foll-3363859033
+    translations: []
+test3.html:
+    export: en/test3.html
+    lang: en
+    title: TEST3
+    meta:
+        author: schukai3 GmbH
+        description: The 3request was malformed or invalid.
+    images:
+        - id: tickyesdata-image-gi-4013311193
+          source: |-
+            data:image/gif;base64,R0lGODdhEAAQAMwAAPj7+FmhUYjNfGuxYYDJdYTIeanOpT+DOTuANXi/bGOrWj6CONzv2sPjv2Cm
+              V1unU4zPgI/Sg6DJnJ3ImTh8Mtbs00aNP1CZSGy0YqLEn47RgXW8amasW7XWsmmvX2iuXiwAAAAAEAAQAAAFVyAgjmRpnihqGCkpDQ
+              PbGkNUOFk6DZqgHCNGg2T4QAQBoIiRSAwBE4VA4FACKgkB5NGReASFZEmxsQ0whPDi9BiACYQAInXhwOUtgCUQoORFCGt/g4QAIQA7
+          alt: tick
+          title: "yes"
+    anchors:
+        - id: yes-a-html
+          href: /a.html
           hreflang: ""
           title: "Yes"
     text:
-        - text: Bad Request
-          id: bad-request
+        - text: Bad xxxx
+          id: bad-xxxx
         - text: The request was incorrect, the server could not process it.
           id: the-request-was-inco-2640993422
         - text: Try submitting your
@@ -32,3 +113,4 @@ test.html:
           id: if-you-received-this-423958995
         - text: 'You   can   try    the following steps:'
           id: you-can-try-the-foll-3363859033
+    translations: []
diff --git a/development/examples/example1/template/test1.html b/development/examples/example1/template/test1.html
new file mode 100644
index 0000000..cecbc1b
--- /dev/null
+++ b/development/examples/example1/template/test1.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html><html lang="de" data-attributes="lang path:lang"><head>
+
+    <style>
+        *:not(:defined) {
+            visibility: hidden;
+        }
+    </style>
+
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
+
+    <meta name="robots" content="noindex"/>
+
+    <link rel="icon" type="image/x-icon" href="/asset/icon/favicon.svg"/>
+    <meta name="theme-color" content="#c10000"/>
+    <link rel="apple-touch-icon" sizes="180x180" href="/asset/icon/apple-touch-icon.png"/>
+    <link rel="icon" type="image/png" sizes="32x32" href="/asset/icon/favicon-32x32.png"/>
+    <link rel="icon" type="image/png" sizes="16x16" href="/asset/icon/favicon-16x16.png"/>
+    <link rel="mask-icon" href="/asset/icon/safari-pinned-tab.svg" color="#fd1d1d"/>
+    <meta name="msapplication-TileImage" content="/asset/icon/mstile-144x144.png"/>
+    <meta name="msapplication-TileColor" content="#fd1d1d"/>
+
+    <title data-replace="path:title">TESTx</title>
+    <meta name="description" content="The request was malformed or invalid." data-attributes="content path:meta.description"/>
+    <meta name="author" content="schukai GmbH" data-attributes="content path:meta.author"/>
+
+    <link rel="icon" href="/favicon.ico"/>
+    <link rel="icon" href="/favicon.svg" type="image/svg+xml"/>
+    <link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
+
+    <script id="translations" type="application/json" data-monster-role="translation" data-replace="path:translations.translations.content">
+        {
+            "key1": "value1",
+            "key2": "value2",
+            "key3": {
+                "one": "value3",
+                "two": "value4"
+            }
+        }
+    </script>
+    
+    
+    <script id="mainscript" src="/script/main22.mjs" type="module"></script>
+</head>
+
+<body>
+<header>
+    <div class="gradient"></div>
+</header>
+
+<monster-state>
+    <img width="16" height="16" alt="tick" title="yes" src="data:image/gif;base64,R0lGODdhEAAQAMwAAPj7+FmhUYjNfGuxYYDJdYTIeanOpT+DOTuANXi/bGOrWj6CONzv2sPjv2Cm
+  V1unU4zPgI/Sg6DJnJ3ImTh8Mtbs00aNP1CZSGy0YqLEn47RgXW8amasW7XWsmmvX2iuXiwAAAAAEAAQAAAFVyAgjmRpnihqGCkpDQ
+  PbGkNUOFk6DZqgHCNGg2T4QAQBoIiRSAwBE4VA4FACKgkB5NGReASFZEmxsQ0whPDi9BiACYQAInXhwOUtgCUQoORFCGt/g4QAIQA7" id="tickyesdata-image-gi-4013311193" data-attributes="src path:content.tickyesdata-image-gi-4013311193.src,alt path:content.tickyesdata-image-gi-4013311193.alt,title path:content.tickyesdata-image-gi-4013311193.title"/>
+    <h1 class="deco"><span id="bad-xxxx" data-replace-self="path:text.bad-xxxx.text">Bad xxxx</span></h1>
+    <p><span id="the-request-was-inco-2640993422" data-replace-self="path:text.the-request-was-inco-2640993422.text">The request was incorrect, the server could not process it.
+    </span></p><p>
+</p><div class="infobox">
+    <div>
+
+        <ul>
+
+            <li><span id="try-submitting-your" data-replace-self="path:text.try-submitting-your.text">Try submitting your </span><a href="/a.html" title="Yes" id="yes-a-html" data-attributes="href path:anchors.yes-a-html.href,title path:anchors.yes-a-html.title,hreflang path:anchors.yes-a-html.hreflang">request</a> again (sometimes this helps).</li>
+            <li><span id="contact-support-if-y-3404332025" data-replace-self="path:text.contact-support-if-y-3404332025.text">Contact support if you continue to have problems.</span></li>
+
+            <li><span id="if-you-received-this-423958995" data-replace-self="path:text.if-you-received-this-423958995.text">If you received this message as a result of a request to the server API, then check the structure
+                against the documentation.
+            </span></li>
+
+
+        </ul>
+
+        <p><span id="you-can-try-the-foll-3363859033" data-replace-self="path:text.you-can-try-the-foll-3363859033.text">You   can   try    the following steps:</span></p>
+        
+    </div>
+</div>
+
+
+</monster-state>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/development/examples/example1/template/test2.html b/development/examples/example1/template/test2.html
new file mode 100644
index 0000000..39adaf5
--- /dev/null
+++ b/development/examples/example1/template/test2.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html><html lang="en" data-attributes="lang path:lang"><head>
+
+    <style>
+        *:not(:defined) {
+            visibility: hidden;
+        }
+    </style>
+
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
+
+    <meta name="robots" content="noindex"/>
+
+    <link rel="icon" type="image/x-icon" href="/asset/icon/favicon.svg"/>
+    <meta name="theme-color" content="#c10000"/>
+    <link rel="apple-touch-icon" sizes="180x180" href="/asset/icon/apple-touch-icon.png"/>
+    <link rel="icon" type="image/png" sizes="32x32" href="/asset/icon/favicon-32x32.png"/>
+    <link rel="icon" type="image/png" sizes="16x16" href="/asset/icon/favicon-16x16.png"/>
+    <link rel="mask-icon" href="/asset/icon/safari-pinned-tab.svg" color="#fd1d1d"/>
+    <meta name="msapplication-TileImage" content="/asset/icon/mstile-144x144.png"/>
+    <meta name="msapplication-TileColor" content="#fd1d1d"/>
+
+    <title data-replace="path:title">TEST2</title>
+    <meta name="description" content="The 2request was malformed or invalid." data-attributes="content path:meta.description"/>
+    <meta name="author" content="sch2ukai GmbH" data-attributes="content path:meta.author"/>
+
+    <link rel="icon" href="/favicon.ico"/>
+    <link rel="icon" href="/favicon.svg" type="image/svg+xml"/>
+    <link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
+
+    <script id="mainscript" src="/script/main22.mjs" type="module"></script>
+</head>
+
+<body>
+<header>
+    <div class="gradient"></div>
+</header>
+
+<monster-state>
+    <img width="16" height="16" alt="tick" title="yes" src="data:image/gif;base64,R0lGODdhEAAQAMwAAPj7+FmhUYjNfGuxYYDJdYTIeanOpT+DOTuANXi/bGOrWj6CONzv2sPjv2Cm
+  V1unU4zPgI/Sg6DJnJ3ImTh8Mtbs00aNP1CZSGy0YqLEn47RgXW8amasW7XWsmmvX2iuXiwAAAAAEAAQAAAFVyAgjmRpnihqGCkpDQ
+  PbGkNUOFk6DZqgHCNGg2T4QAQBoIiRSAwBE4VA4FACKgkB5NGReASFZEmxsQ0whPDi9BiACYQAInXhwOUtgCUQoORFCGt/g4QAIQA7" id="tickyesdata-image-gi-4013311193" data-attributes="alt path:content.tickyesdata-image-gi-4013311193.alt,src path:content.tickyesdata-image-gi-4013311193.src,title path:content.tickyesdata-image-gi-4013311193.title"/>
+    <h1 class="deco"><span id="bad-xxxx" data-replace-self="path:text.bad-xxxx.text">Bad xxxx</span></h1>
+    <p><span id="the-request-was-inco-2640993422" data-replace-self="path:text.the-request-was-inco-2640993422.text">The request was incorrect, the server could not process it.
+    </span></p><p>
+</p><div class="infobox">
+    <div>
+
+        <ul>
+
+            <li><span id="try-submitting-your" data-replace-self="path:text.try-submitting-your.text">Try submitting your </span><a href="/a.html" title="Yes" id="yes-a-html" data-attributes="href path:anchors.yes-a-html.href,title path:anchors.yes-a-html.title,hreflang path:anchors.yes-a-html.hreflang">request</a> again (sometimes this helps).</li>
+            <li><span id="contact-support-if-y-3404332025" data-replace-self="path:text.contact-support-if-y-3404332025.text">Contact support if you continue to have problems.</span></li>
+
+            <li><span id="if-you-received-this-423958995" data-replace-self="path:text.if-you-received-this-423958995.text">If you received this message as a result of a request to the server API, then check the structure
+                against the documentation.
+            </span></li>
+
+
+        </ul>
+
+        <p><span id="you-can-try-the-foll-3363859033" data-replace-self="path:text.you-can-try-the-foll-3363859033.text">You   can   try    the following steps:</span></p>
+        
+    </div>
+</div>
+
+
+</monster-state>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/development/examples/example1/template/test3.html b/development/examples/example1/template/test3.html
new file mode 100644
index 0000000..b374b70
--- /dev/null
+++ b/development/examples/example1/template/test3.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html><html lang="en" data-attributes="lang path:lang"><head>
+
+    <style>
+        *:not(:defined) {
+            visibility: hidden;
+        }
+    </style>
+
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
+
+    <meta name="robots" content="noindex"/>
+
+    <link rel="icon" type="image/x-icon" href="/asset/icon/favicon.svg"/>
+    <meta name="theme-color" content="#c10000"/>
+    <link rel="apple-touch-icon" sizes="180x180" href="/asset/icon/apple-touch-icon.png"/>
+    <link rel="icon" type="image/png" sizes="32x32" href="/asset/icon/favicon-32x32.png"/>
+    <link rel="icon" type="image/png" sizes="16x16" href="/asset/icon/favicon-16x16.png"/>
+    <link rel="mask-icon" href="/asset/icon/safari-pinned-tab.svg" color="#fd1d1d"/>
+    <meta name="msapplication-TileImage" content="/asset/icon/mstile-144x144.png"/>
+    <meta name="msapplication-TileColor" content="#fd1d1d"/>
+
+    <title data-replace="path:title">TEST3</title>
+    <meta name="description" content="The 3request was malformed or invalid." data-attributes="content path:meta.description"/>
+    <meta name="author" content="schukai3 GmbH" data-attributes="content path:meta.author"/>
+
+    <link rel="icon" href="/favicon.ico"/>
+    <link rel="icon" href="/favicon.svg" type="image/svg+xml"/>
+    <link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
+
+    <script id="mainscript" src="/script/main22.mjs" type="module"></script>
+</head>
+
+<body>
+<header>
+    <div class="gradient"></div>
+</header>
+
+<monster-state>
+    <img width="16" height="16" alt="tick" title="yes" src="data:image/gif;base64,R0lGODdhEAAQAMwAAPj7+FmhUYjNfGuxYYDJdYTIeanOpT+DOTuANXi/bGOrWj6CONzv2sPjv2Cm
+  V1unU4zPgI/Sg6DJnJ3ImTh8Mtbs00aNP1CZSGy0YqLEn47RgXW8amasW7XWsmmvX2iuXiwAAAAAEAAQAAAFVyAgjmRpnihqGCkpDQ
+  PbGkNUOFk6DZqgHCNGg2T4QAQBoIiRSAwBE4VA4FACKgkB5NGReASFZEmxsQ0whPDi9BiACYQAInXhwOUtgCUQoORFCGt/g4QAIQA7" id="tickyesdata-image-gi-4013311193" data-attributes="alt path:content.tickyesdata-image-gi-4013311193.alt,src path:content.tickyesdata-image-gi-4013311193.src,title path:content.tickyesdata-image-gi-4013311193.title"/>
+    <h1 class="deco"><span id="bad-xxxx" data-replace-self="path:text.bad-xxxx.text">Bad xxxx</span></h1>
+    <p><span id="the-request-was-inco-2640993422" data-replace-self="path:text.the-request-was-inco-2640993422.text">The request was incorrect, the server could not process it.
+    </span></p><p>
+</p><div class="infobox">
+    <div>
+
+        <ul>
+
+            <li><span id="try-submitting-your" data-replace-self="path:text.try-submitting-your.text">Try submitting your </span><a href="/a.html" title="Yes" id="yes-a-html" data-attributes="href path:anchors.yes-a-html.href,title path:anchors.yes-a-html.title,hreflang path:anchors.yes-a-html.hreflang">request</a> again (sometimes this helps).</li>
+            <li><span id="contact-support-if-y-3404332025" data-replace-self="path:text.contact-support-if-y-3404332025.text">Contact support if you continue to have problems.</span></li>
+
+            <li><span id="if-you-received-this-423958995" data-replace-self="path:text.if-you-received-this-423958995.text">If you received this message as a result of a request to the server API, then check the structure
+                against the documentation.
+            </span></li>
+
+
+        </ul>
+
+        <p><span id="you-can-try-the-foll-3363859033" data-replace-self="path:text.you-can-try-the-foll-3363859033.text">You   can   try    the following steps:</span></p>
+        
+    </div>
+</div>
+
+
+</monster-state>
+
+
+
+</body></html>
\ No newline at end of file
-- 
GitLab