diff --git a/source/translate/main.go b/source/translate/main.go index e3a4f5434e610334d6f10311301397f7b3bc1496..5cd487a8a65ef20cefdb2f93590883fa2aca0411 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) + } }