49 lines
1.5 KiB
Go
49 lines
1.5 KiB
Go
package utils
|
|
|
|
// TranslateChartData processes chart data with language source data to produce the result based on the language key.
|
|
func TranslateChartData(chartData []map[string]interface{}, languageSource []map[string]interface{}, langKey string) []map[string]interface{} {
|
|
// Helper function to find translation
|
|
findTranslation := func(key string, value string) string {
|
|
for _, langEntry := range languageSource {
|
|
if langEntry["key"] == key && langEntry["value"] == value {
|
|
if translatedValue, ok := langEntry[langKey]; ok {
|
|
return translatedValue.(string)
|
|
}
|
|
}
|
|
}
|
|
return value // Return the original value if no translation is found
|
|
}
|
|
|
|
// Extract unique translation keys from languageSource
|
|
translationKeys := map[string]bool{}
|
|
for _, langEntry := range languageSource {
|
|
if key, ok := langEntry["key"].(string); ok {
|
|
translationKeys[key] = true
|
|
}
|
|
}
|
|
|
|
// Process each chart data entry
|
|
result := []map[string]interface{}{}
|
|
for _, entry := range chartData {
|
|
obsKey := entry["ObsKey"].(map[string]interface{})
|
|
translatedObsKey := map[string]interface{}{}
|
|
|
|
// Translate fields in ObsKey dynamically based on extracted translation keys
|
|
for key, value := range obsKey {
|
|
if translationKeys[key] {
|
|
translatedObsKey[key] = findTranslation(key, value.(string))
|
|
} else {
|
|
translatedObsKey[key] = value
|
|
}
|
|
}
|
|
|
|
// Append the translated entry to the result
|
|
result = append(result, map[string]interface{}{
|
|
"ObsKey": translatedObsKey,
|
|
"ObsValue": entry["ObsValue"],
|
|
})
|
|
}
|
|
|
|
return result
|
|
}
|