Translate Jarvis Run Details; fix String vs LocalizedStringKey bug

detailRow's label and outputBlock's title were typed String instead
of LocalizedStringKey, so Text(label)/Text(title) inside them could
never localize regardless of catalog content — the exact anti-pattern
CLAUDE.md's i18n rules warn against for helper functions. Fixed the
types, then translated the 6 genuinely-new strings (Run Details, No
output for this run., Started, Duration, Trigger, Tokens) into
nb/sv/da/de/fr. A few others (Cost, Error, Output, Copied!) were
already covered from being reused elsewhere in the catalog.
This commit is contained in:
2026-08-07 13:44:04 +02:00
parent 1925c9c657
commit 30efc58d16
2 changed files with 206 additions and 2 deletions
+204
View File
@@ -21343,6 +21343,210 @@
} }
} }
} }
},
"Run Details" : {
"localizations" : {
"da" : {
"stringUnit" : {
"state" : "translated",
"value" : "Kørselsdetaljer"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ausführungsdetails"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Détails de l'exécution"
}
},
"nb" : {
"stringUnit" : {
"state" : "translated",
"value" : "Kjøredetaljer"
}
},
"sv" : {
"stringUnit" : {
"state" : "translated",
"value" : "Körningsdetaljer"
}
}
}
},
"No output for this run." : {
"localizations" : {
"da" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ingen output for denne kørsel."
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Keine Ausgabe für diesen Lauf."
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Aucune sortie pour cette exécution."
}
},
"nb" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ingen output for denne kjøringen."
}
},
"sv" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ingen output för denna körning."
}
}
}
},
"Started" : {
"localizations" : {
"da" : {
"stringUnit" : {
"state" : "translated",
"value" : "Startet"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Gestartet"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Démarré"
}
},
"nb" : {
"stringUnit" : {
"state" : "translated",
"value" : "Startet"
}
},
"sv" : {
"stringUnit" : {
"state" : "translated",
"value" : "Startad"
}
}
}
},
"Duration" : {
"localizations" : {
"da" : {
"stringUnit" : {
"state" : "translated",
"value" : "Varighed"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Dauer"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Durée"
}
},
"nb" : {
"stringUnit" : {
"state" : "translated",
"value" : "Varighet"
}
},
"sv" : {
"stringUnit" : {
"state" : "translated",
"value" : "Varaktighet"
}
}
}
},
"Trigger" : {
"localizations" : {
"da" : {
"stringUnit" : {
"state" : "translated",
"value" : "Udløser"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Auslöser"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Déclencheur"
}
},
"nb" : {
"stringUnit" : {
"state" : "translated",
"value" : "Utløser"
}
},
"sv" : {
"stringUnit" : {
"state" : "translated",
"value" : "Utlösare"
}
}
}
},
"Tokens" : {
"localizations" : {
"da" : {
"stringUnit" : {
"state" : "translated",
"value" : "Tokens"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Tokens"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Tokens"
}
},
"nb" : {
"stringUnit" : {
"state" : "translated",
"value" : "Tokens"
}
},
"sv" : {
"stringUnit" : {
"state" : "translated",
"value" : "Tokens"
}
}
}
} }
}, },
"version" : "1.1" "version" : "1.1"
+2 -2
View File
@@ -787,7 +787,7 @@ struct JarvisRunDetailSheet: View {
.onExitCommand { dismiss() } .onExitCommand { dismiss() }
} }
private func detailRow(_ label: String, _ value: String) -> some View { private func detailRow(_ label: LocalizedStringKey, _ value: String) -> some View {
HStack { HStack {
Text(label) Text(label)
.font(.system(size: 13)) .font(.system(size: 13))
@@ -800,7 +800,7 @@ struct JarvisRunDetailSheet: View {
} }
@ViewBuilder @ViewBuilder
private func outputBlock(title: String, text: String, color: Color, showCopied: Binding<Bool>) -> some View { private func outputBlock(title: LocalizedStringKey, text: String, color: Color, showCopied: Binding<Bool>) -> some View {
VStack(alignment: .leading, spacing: 6) { VStack(alignment: .leading, spacing: 6) {
HStack(spacing: 6) { HStack(spacing: 6) {
Text(title) Text(title)