Agregar Páginas
Hay varias formas de crear páginas multilingües con Astro i18n Starter.
Si deseas separar archivos por idioma
Crea carpetas para cada idioma dentro de pages
y agrega archivos en formato Astro o Markdown.
src/pages
├── en/
│ ├── page-1.astro
│ └── page-2.mdx
└── ja/
├── page-1.astro
└── page-2.mdx
Se generarán las siguientes páginas:
- /en/page-1/index.html
- /en/page-2/index.html
- /ja/page-1/index.html
- /ja/page-2/index.html
Si deseas gestionar en un solo archivo
Si la cantidad de texto en la página no es demasiado grande, puedes usar la función de rutas dinámicas de Astro para generar dinámicamente páginas para cada idioma desde un solo archivo.
src/pages
└── [lang]/
├── page-1.astro
└── page-2.astro
Importa el objeto LOCALES
en el archivo y genera rutas dinámicas usando la función getStaticPaths()
de Astro.
---
import { LOCALES } from "@/i18n";
export const getStaticPaths = () =>
Object.keys(LOCALES).map((lang) => ({
params: { lang },
}));
---
Se generarán las siguientes páginas:
- /en/page-1/index.html
- /en/page-2/index.html
- /ja/page-1/index.html
- /ja/page-2/index.html
Si deseas usar Content Collection
Si deseas gestionar páginas como blogs o noticias en archivos Markdown, puedes usar la función de colección de contenido de Astro.
Estructura de directorios
src/
├── content.config.ts
├── blog/
│ ├── en/
│ │ ├── first-post.md
│ │ └── second-post.md
│ └── ja/
│ ├── first-post.md
│ └── second-post.md
└── pages/[lang]/blog/
├── index.astro
└── [...id].astro
pages/[lang]/blog/[…id].astro
---
import { getCollection } from "astro:content";
export async function getStaticPaths() {
const posts = await getCollection("blog", ({ data }) => !data.draft)
return posts.map((post) => {
const [lang, ...id] = post.id.split("/");
return { params: { lang, id: id.join("/") || undefined }, props: post };
});
}
---
Para más detalles, consulta la documentación de Astro.