From 1bed4ef6a8116e7e2b0c79426eaaadd2eeea33d9 Mon Sep 17 00:00:00 2001
From: Volker Schukai <volker.schukai@schukai.com>
Date: Sat, 8 Feb 2025 14:26:22 +0100
Subject: [PATCH] fix(translate): write

---
 source/translate/main.go | 52 +++++++++++++++++++++++++++++++---------
 1 file changed, 41 insertions(+), 11 deletions(-)

diff --git a/source/translate/main.go b/source/translate/main.go
index e3a4f54..5cd487a 100644
--- a/source/translate/main.go
+++ b/source/translate/main.go
@@ -6,6 +6,7 @@ import (
 	"gitlab.schukai.com/oss/bob/types"
 	"gopkg.in/yaml.v3"
 	"os"
+	"path"
 	"strings"
 )
 
@@ -52,27 +53,56 @@ func Do(dataFile, api string, targetLanguages []string) {
 		translationsByLang[lang] = trans
 	}
 
+	dataDir := path.Dir(dataFile)
+
 	// 4. Für jede Sprache: Original-Struktur kopieren, übersetzte Texte an derselben Stelle eintragen und als YAML speichern.
 	for _, lang := range targetLanguages {
 
-		for _, page := range storage {
+		pageTarget := types.PageDataStorage{}
 
-			translatedPage := applyTranslations(*page, translationsByLang[lang])
-			// Optional: Sprache im PageData anpassen
-			translatedPage.Lang = lang
+		langSourcePath := fmt.Sprintf("%s/%s.yaml", dataDir, lang)
+		langSourceData, err := os.ReadFile(langSourcePath)
+		if err != nil {
 
-			outData, err := yaml.Marshal(&translatedPage)
-			if err != nil {
-				log.Fatalf("Error marshalling translated data for %s: %v", lang, err)
+			if !os.IsNotExist(err) {
+				log.Fatalf("Error reading data file %s: %v", langSourcePath, err)
+				continue
 			}
 
-			filename := fmt.Sprintf("%s.yaml", lang)
-			err = os.WriteFile(filename, outData, 0644)
+			// Wenn die Datei nicht existiert, wird sie neu erstellt.
+			pageTarget = storage
+
+		} else {
+
+			err = yaml.Unmarshal(langSourceData, &pageTarget)
 			if err != nil {
-				log.Fatalf("Error writing translated data for %s: %v", lang, err)
+				log.Fatalf("Error unmarshalling data file %s: %v", langSourcePath, err)
+				continue
 			}
-			log.Info("Translated data for %s written to %s.\n", lang, filename)
 		}
+
+		for name, page := range pageTarget {
+
+			translatedPage := applyTranslations(*page, translationsByLang[lang])
+			// Optional: Sprache im PageData anpassen
+			translatedPage.Lang = lang
+
+			pageTarget[name] = &translatedPage
+
+		}
+
+		outData, err := yaml.Marshal(&pageTarget)
+		if err != nil {
+			log.Fatalf("Error marshalling translated data for %s: %v", lang, err)
+		}
+
+		filename := fmt.Sprintf("%s/%s.yaml", dataDir, lang)
+		err = os.WriteFile(filename, outData, 0644)
+		if err != nil {
+			log.Fatalf("Error writing translated data for %s: %v", lang, err)
+		}
+		log.Info("Translated data for %s written to %s.\n", lang, filename)
+
 	}
 }
 
-- 
GitLab