¿Se pueden componer los tipos de nodos? (ej. múltiples plurales en una misma frase)
Sí, los tipos de nodos en Intlayer se pueden componer. Por ejemplo, puedes anidar un plural() dentro de otro plural(), o componer plural() con insert().
Cuando necesitas expresar dos variables de plural independientes en una sola frase (por ejemplo: "1 archivo en 2 carpetas" vs. "3 archivos en 1 carpeta"), existen dos enfoques principales:
- Usar
insert()con clavesplural()independientes (Recomendado): Limpio, mantenible y preserva el orden correcto de las palabras entre diferentes idiomas. - Anidar
plural()dentro deplural()(Composición directa): Sintaxis válida, pero puede provocar una explosión combinatoria de ramas en idiomas con reglas de plural complejas.
Componer insert() con plural()
El patrón más flexible e idiomático consiste en declarar claves plural individuales para cada término pluralizado y combinarlas mediante una plantilla insert().
1. Declarar el contenido
src/fileSummary.content.ts
Copiar código
Copiar el código al portapapeles
import { insert, plural, t, type Dictionary } from "intlayer";
const fileSummaryContent = {
key: "file_summary",
content: {
// La plantilla de inserción define el orden de los elementos por idioma
summary: t({
es: insert("{{files}} en {{folders}}"),
en: insert("{{files}} in {{folders}}"),
fr: insert("{{files}} dans {{folders}}"),
ja: insert("{{folders}}の中に{{files}}"), // Nótese el orden de palabras personalizado para japonés
}),
files: t({
es: plural({
one: "{{count}} archivo",
other: "{{count}} archivos",
}),
en: plural({
one: "{{count}} file",
other: "{{count}} files",
}),
fr: plural({
one: "{{count}} fichier",
other: "{{count}} fichiers",
}),
ja: plural({
other: "{{count}} 個のファイル",
}),
}),
folders: t({
es: plural({
one: "{{count}} carpeta",
other: "{{count}} carpetas",
}),
en: plural({
one: "{{count}} folder",
other: "{{count}} folders",
}),
fr: plural({
one: "{{count}} dossier",
other: "{{count}} dossiers",
}),
ja: plural({
other: "{{count}} 個のフォルダー",
}),
}),
},
} satisfies Dictionary;
export default fileSummaryContent;
2. Consumir en el componente
src/components/FileSummary.tsx
Copiar código
Copiar el código al portapapeles
src/components/FileSummary.vue
Copiar código
Copiar el código al portapapeles
src/components/FileSummary.svelte
Copiar código
Copiar el código al portapapeles
Por qué este es el enfoque recomendado
- Estructura de la oración y orden de las palabras: Diferentes idiomas colocan los adjetivos, contadores y objetos en órdenes distintos (por ejemplo, el japonés o el alemán pueden invertir el orden de archivos y carpetas). Una plantilla
insert()otorga a los traductores un control completo sobre el orden sin alterar las reglas de pluralización. - Evita la explosión combinatoria: Si el idioma A tiene 2 formas de plural (inglés:
one,other) y el idioma B tiene 4 formas (ruso:one,few,many,other), anidar plurales requeriría $4 \times 4 = 16$ ramas para el ruso. Con claves independientes, solo declaras $4 + 4 = 8$ ramas. - Reutilización: Puedes reutilizar las definiciones de plural de
filesofoldersen otras partes de tu interfaz.