Contenido enriquecido
Traducción con Markup
Usa t.markup(key, tags) para interpolar etiquetas HTML dentro de un string de traducción. El objeto tags mapea nombres de etiquetas a funciones que reciben el contenido interno. En 2.2.2 el HTML final se sanitiza con un parser y una allowlist; los callbacks de tags siguen siendo código confiable de la aplicación.
{
"hero": {
"description": "A <bold>type-safe</bold> solution for <link>Astro</link>"
}
}---
const tHero = getTranslations("hero");
---
<p set:html={tHero.markup("description", {
bold: (chunks) => `<strong>${chunks}</strong>`,
link: (chunks) => `<a href="https://astro.build">${chunks}</a>`,
})} />Markup + Interpolación
Combina interpolación de variables con reemplazo de tags pasando {curlyOpen} values, tags {curlyClose} a t.markup(). La interpolación se ejecuta primero, luego se procesan los tags.
{
"hero": {
"welcome": "Hello {name}, read our <link>docs</link> to get started"
}
}---
const tHero = getTranslations("hero");
---
<p set:html={tHero.markup("welcome", {
values: { name: "John" },
tags: {
link: (chunks) => `<a href="/docs">${chunks}</a>`,
}
})} />
<!-- "Hello John, read our <a href="/docs">docs</a> to get started" -->t.raw() — Valores Sin Coerción
Usa t.raw(key) para acceder al valor de traducción sin coerción a string. Perfecto para arrays, objetos y números que necesitas en su tipo JavaScript nativo.
Accediendo a Arrays
Cuando tus traducciones contienen arrays, t.raw() los retorna como arrays JavaScript reales en lugar del string [object Object].
{
"features": ["Fast", "Lightweight", "Type-safe"]
}---
import { getTranslations } from "astro-intl";
const t = getTranslations();
// Get raw array
const features = t.raw("features") as string[];
// features = ["Fast", "Lightweight", "Type-safe"]
---
<ul>
{features.map(feature => <li>{feature}</li>)}
</ul>Accediendo a Objetos
Los objetos se retornan tal cual, permitiéndote acceder a propiedades anidadas directamente sin parsing.
{
"theme": {
"primary": "#3b82f6",
"secondary": "#64748b"
}
}---
const theme = t.raw("theme") as { primary: string; secondary: string };
// theme = { primary: "#3b82f6", secondary: "#64748b" }
---
<div style={`background: ${theme.primary}`}>...</div>Accediendo a Números
Los números permanecen como números — útil para cálculos o pasar a componentes que esperan valores numéricos.
{
"config": {
"maxItems": 100,
"timeout": 30
}
}---
const maxItems = t.raw("config.maxItems") as number;
// maxItems = 100 (number, not string)
// Can use for calculations
const limit = maxItems * 0.8; // 80
---