autorenew

Adding Pages

There are several ways to create multilingual pages with [object Object].

If you want to separate files by language

Create folders for each language under pages and add files in Astro or Markdown format.

src/pages
├── en/
│   ├── page-1.astro
│   └── page-2.mdx
└── ja/
  ├── page-1.astro
  └── page-2.mdx

The following pages will be generated:

If you want to manage in a single file

If the amount of text on the page is not too large, you can use Astro’s dynamic routing feature to dynamically generate pages for each language from a single file.

src/pages
└── [lang]/
    ├── page-1.astro
    └── page-2.astro

Import the LOCALES object in the file and generate dynamic routes using Astro’s getStaticPaths() function.

---
import { LOCALES } from "@/i18n";

export const getStaticPaths = () =>
  Object.keys(LOCALES).map((lang) => ({
    params: { lang },
  }));
---

The following pages will be generated:

If you want to use Content Collection

If you want to manage pages such as blogs or news in Markdown files, you can use Astro’s content collection feature.

Directory

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");

  return posts.map((post) => {
    const [lang, ...id] = post.id.split("/");
    return { params: { lang, id: id.join("/") || undefined }, props: post };
  });
}
---

For more details, please check Astro’s documentation.

Content Collections | Docs