fix(web): keep ICU quotes out of messages inserted as raw HTML

This commit is contained in:
Manuel Escalante
2026-11-02 10:32:41 +01:00
parent 64fa4f8115
commit 511211f10b
3 changed files with 9 additions and 2 deletions
@@ -1,6 +1,7 @@
import type { Metadata } from "next"
import { getTranslations, getMessages, setRequestLocale } from "next-intl/server"
import { Link } from "@/i18n/navigation"
import { icuQuotesToHtml } from "@/i18n/loadMessages"
import { DocHeader } from "@/components/ui/doc-header"
export async function generateMetadata({
@@ -114,7 +115,7 @@ export default async function GlossaryPage({
</dt>
<dd
className="text-gray-800 leading-relaxed [&_a]:text-blue-600 [&_a]:hover:underline [&_code]:bg-gray-100 [&_code]:px-1 [&_code]:py-0.5 [&_code]:rounded [&_code]:text-sm"
dangerouslySetInnerHTML={{ __html: entry.def }}
dangerouslySetInnerHTML={{ __html: icuQuotesToHtml(entry.def) }}
/>
</div>
))}
@@ -1,6 +1,7 @@
import type { Metadata } from "next"
import { getTranslations, getMessages, setRequestLocale } from "next-intl/server"
import { Link } from "@/i18n/navigation"
import { icuQuotesToHtml } from "@/i18n/loadMessages"
import { DocHeader } from "@/components/ui/doc-header"
import { Callout } from "@/components/ui/callout"
import CopyableCode from "@/components/CopyableCode"
@@ -135,7 +136,7 @@ export default async function SystemLogsTabPage({
className={idx < dataRows.length - 1 ? "border-b border-gray-100" : ""}
>
<td className="px-3 py-2 align-top">{row.subtab}</td>
<td className="px-3 py-2 align-top font-mono text-xs" dangerouslySetInnerHTML={{ __html: row.endpoint }} />
<td className="px-3 py-2 align-top font-mono text-xs" dangerouslySetInnerHTML={{ __html: icuQuotesToHtml(row.endpoint) }} />
<td className="px-3 py-2 align-top">
{t.rich(`dataCollected.rows.${idx}.source`, { code })}
</td>
+5
View File
@@ -73,6 +73,11 @@ function decodeEntities(value: unknown): unknown {
return value
}
// Messages inserted as raw HTML skip ICU, so its quoting goes back to entities.
export function icuQuotesToHtml(html: string): string {
return html.replace(/'<'/g, "&lt;").replace(/'>'/g, "&gt;")
}
function toCamel(name: string): string {
return name.replace(/-([a-z0-9])/g, (_, c) => c.toUpperCase())
}