Haz tu pregunta y obtén un resumen del documento referenciando esta página y el proveedor AI de tu elección
Historial de versiones
- "Introducir contenido basado en selección"v9.1.030/7/2026
El contenido de esta página ha sido traducido con una IA.
Ver la última versión del contenido original en inglésIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Contenido Basado en Selección / Select en Intlayer
Cómo funciona Select
En Intlayer, el contenido basado en selección se logra mediante la función select, que asigna valores de cadena arbitrarios a su contenido correspondiente. Es el equivalente a un mensaje {value, select, …} de ICU, o a una declaración switch en el código de tu aplicación.
Usa select cuando el discriminante es una cadena de formato libre: un estado, un plan, una plataforma, un rol. Para los demás discriminantes, Intlayer proporciona nodos dedicados:
Abrir la tabla en una ventana flotante para ver todo el contenido claramente
| Discriminante | Nodo |
|---|---|
| Una cantidad | enu() |
| Un booleano | cond() |
| Un género | gender() |
| Cualquier otra cadena | select() |
Configurando el Contenido Basado en Selección
Para configurar el contenido basado en selección en tu proyecto de Intlayer, crea un módulo de contenido que incluya tus definiciones de selección. A continuación se muestran ejemplos en varios formatos.
Copiar el código al portapapeles
import { select, type Dictionary } from "intlayer";
const myPostContent = {
key: "my_key",
content: {
publishStatus: select({
draft: "This post is a draft",
published: "This post is live",
scheduled: "This post is scheduled",
fallback: "Unknown status", // Opcional
}),
},
} satisfies Dictionary;
export default myPostContent;Si no se declara unfallback, la última clave declarada se tomará como valor predeterminado cuando el valor proporcionado no coincida con ningún caso declarado; el mismo contrato quecond()ygender().
Seguridad de tipos
El argumento aceptado se infiere de los casos declarados:
- Sin un
fallback, solo se aceptan los casos declarados: un error tipográfico es un error de tipo. - Con un
fallback, se acepta cualquier cadena (el fallback cubre los valores no coincidentes) mientras los casos declarados siguen autocompletándose.
¿Por qué no un objeto simple?
Es tentador declarar un objeto simple e indexarlo con el valor de tiempo de ejecución:
Copiar el código al portapapeles
// ❌ No hagas estoconst { publishStatus } = useIntlayer("my_key");return <p>{publishStatus[publishType]}</p>;El compilador de Intlayer analiza tu fuente para eliminar el contenido no utilizado y minificar las claves restantes. Un acceso computado dinámico (obj[expr]) no se puede resolver estáticamente, por lo que toda la rama se marca como opaca: se mantiene en el paquete y sus claves permanecen sin minificar.
Con select(), la resolución del caso ocurre dentro de una llamada de función en lugar de como un acceso a una propiedad. El compilador ve un solo acceso de campo estático y optimiza el nodo exactamente como enu(), cond() o gender():
Copiar el código al portapapeles
// ✅ Haz estoconst { publishStatus } = useIntlayer("my_key");return <p>{publishStatus(publishType)}</p>;Usando Contenido Basado en Selección
Para utilizar contenido basado en selección dentro de un componente de React, importa y usa el hook useIntlayer del paquete react-intlayer. Este hook recupera el contenido para la clave especificada y te permite pasar un valor para seleccionar la salida adecuada.
Copiar el código al portapapeles
import type { FC } from "react";
import { useIntlayer } from "react-intlayer";
const PostStatus: FC = () => {
const { publishStatus } = useIntlayer("my_key");
return (
<div>
<p>
{
/* Salida: This post is a draft */
publishStatus("draft")
}
</p>
<p>
{
/* Salida: This post is live */
publishStatus("published")
}
</p>
<p>
{
/* Salida: Unknown status */
publishStatus("Archived")
}
</p>
</div>
);
};
export default PostStatus;Combinando Select con Otros Nodos
Cada caso contiene un nodo de contenido completo, por lo que select se compone con t(), insert(), md() y los demás:
Copiar el código al portapapeles
import { insert, select, t, type Dictionary } from "intlayer";const myPostContent = { key: "my_key", content: { publishStatus: select({ draft: insert( t({ en: "{{name}} saved a draft", fr: "{{name}} a enregistré un brouillon", es: "{{name}} guardó un borrador", }) ), published: insert( t({ en: "{{name}} published the post", fr: "{{name}} a publié l’article", es: "{{name}} publicó el artículo", }) ), fallback: insert( t({ en: "{{name}} updated the post", fr: "{{name}} a mis à jour l’article", es: "{{name}} actualizó el artículo", }) ), }), },} satisfies Dictionary;export default myPostContent;Copiar el código al portapapeles
publishStatus("draft")({ name: "Alice" }); // Salida: Alice guardó un borradorMigrando desde ICU select
Los mensajes que usan el argumento ICU select se importan como nodos select:
Copiar el código al portapapeles
{publishType, select, draft {draft} published {published} other {Unknown}}se convierte en
Copiar el código al portapapeles
select( { draft: "draft", published: "published", fallback: "Unknown", }, "publishType");El caso ICU other pasa a llamarse fallback, que es el nombre canónico de Intlayer para el caso general. El segundo argumento registra el nombre de la variable ICU para que el mensaje regrese exactamente a la misma cadena ICU cuando se exporte.
Un ICUselectcuyos casos son valores de género (male/female/other) se importa en su lugar como un nodogender.
Recursos Adicionales
Para obtener información más detallada sobre configuración y uso, consulta los siguientes recursos:
Estos recursos ofrecen más información sobre la configuración y el uso de Intlayer en varios entornos y frameworks.