i18n: add missing translations for chat UI components (#457)

* i18n: add missing translations for chat UI components

* i18n: add missing translations for chat components and toast messages
This commit is contained in:
broBinChen
2025-12-30 19:52:57 +08:00
committed by GitHub
parent 1ab8d260a2
commit ad80e9c6f5
6 changed files with 122 additions and 55 deletions

View File

@@ -27,6 +27,7 @@ import {
ReasoningTrigger,
} from "@/components/ai-elements/reasoning"
import { ScrollArea } from "@/components/ui/scroll-area"
import { useDictionary } from "@/hooks/use-dictionary"
import { getApiEndpoint } from "@/lib/base-path"
import {
applyDiagramOperations,
@@ -205,6 +206,7 @@ export function ChatMessageDisplay({
onEditMessage,
status = "idle",
}: ChatMessageDisplayProps) {
const dict = useDictionary()
const { chartXML, loadDiagram: onDisplayChart } = useDiagram()
const messagesEndRef = useRef<HTMLDivElement>(null)
const previousXML = useRef<string>("")
@@ -268,9 +270,7 @@ export function ChatMessageDisplay({
setTimeout(() => setCopiedMessageId(null), 2000)
} catch (fallbackErr) {
console.error("Failed to copy message:", fallbackErr)
toast.error(
"Failed to copy message. Please copy manually or check clipboard permissions.",
)
toast.error(dict.chat.failedToCopyDetail)
setCopyFailedMessageId(messageId)
setTimeout(() => setCopyFailedMessageId(null), 2000)
} finally {
@@ -304,7 +304,7 @@ export function ChatMessageDisplay({
})
} catch (error) {
console.error("Failed to log feedback:", error)
toast.error("Failed to record your feedback. Please try again.")
toast.error(dict.errors.failedToRecordFeedback)
// Revert optimistic UI update
setFeedback((prev) => {
const next = { ...prev }
@@ -349,9 +349,7 @@ export function ChatMessageDisplay({
console.error(
"[ChatMessageDisplay] Malformed XML detected in final output",
)
toast.error(
"AI generated invalid diagram XML. Please try regenerating.",
)
toast.error(dict.errors.malformedXml)
}
return // Skip this update
}
@@ -402,9 +400,7 @@ export function ChatMessageDisplay({
"[ChatMessageDisplay] XML validation failed:",
validation.error,
)
toast.error(
"Diagram validation failed. Please try regenerating.",
)
toast.error(dict.errors.validationFailed)
}
} catch (error) {
console.error(
@@ -413,9 +409,7 @@ export function ChatMessageDisplay({
)
// Only show toast if this is the final XML (not during streaming)
if (showToast) {
toast.error(
"Failed to process diagram. Please try regenerating.",
)
toast.error(dict.errors.failedToProcess)
}
}
}
@@ -832,7 +826,10 @@ export function ChatMessageDisplay({
)
}}
className="p-1.5 rounded-lg text-muted-foreground/60 hover:text-muted-foreground hover:bg-muted transition-colors"
title="Edit message"
title={
dict.chat
.editMessage
}
>
<Pencil className="h-3.5 w-3.5" />
</button>
@@ -849,11 +846,13 @@ export function ChatMessageDisplay({
title={
copiedMessageId ===
message.id
? "Copied!"
? dict.chat.copied
: copyFailedMessageId ===
message.id
? "Failed to copy"
: "Copy message"
? dict.chat
.failedToCopy
: dict.chat
.copyResponse
}
>
{copiedMessageId ===
@@ -968,7 +967,7 @@ export function ChatMessageDisplay({
}}
className="px-3 py-1.5 text-xs rounded-lg bg-muted hover:bg-muted/80 transition-colors"
>
Cancel
{dict.common.cancel}
</button>
<button
type="button"
@@ -990,7 +989,7 @@ export function ChatMessageDisplay({
disabled={!editText.trim()}
className="px-3 py-1.5 text-xs rounded-lg bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors"
>
Save & Submit
{dict.chat.saveAndSubmit}
</button>
</div>
</div>
@@ -1123,7 +1122,8 @@ export function ChatMessageDisplay({
"user" &&
isLastUserMessage &&
onEditMessage
? "Click to edit"
? dict.chat
.clickToEdit
: undefined
}
>
@@ -1325,8 +1325,8 @@ export function ChatMessageDisplay({
title={
copiedMessageId ===
message.id
? "Copied!"
: "Copy response"
? dict.chat.copied
: dict.chat.copyResponse
}
>
{copiedMessageId ===
@@ -1352,7 +1352,9 @@ export function ChatMessageDisplay({
)
}
className="p-1.5 rounded-lg text-muted-foreground/60 hover:text-foreground hover:bg-muted transition-colors"
title="Regenerate response"
title={
dict.chat.regenerate
}
>
<RotateCcw className="h-3.5 w-3.5" />
</button>
@@ -1374,7 +1376,7 @@ export function ChatMessageDisplay({
? "text-green-600 bg-green-100"
: "text-muted-foreground/60 hover:text-green-600 hover:bg-green-50"
}`}
title="Good response"
title={dict.chat.goodResponse}
>
<ThumbsUp className="h-3.5 w-3.5" />
</button>
@@ -1393,7 +1395,7 @@ export function ChatMessageDisplay({
? "text-red-600 bg-red-100"
: "text-muted-foreground/60 hover:text-red-600 hover:bg-red-50"
}`}
title="Bad response"
title={dict.chat.badResponse}
>
<ThumbsDown className="h-3.5 w-3.5" />
</button>