setDynamicParams
When having dynamic params in your routes (like src/routes/blog/[slug]
), you need to manually specify the
equivalent params in other locales. That will then be passed to switchLocalePath
and getSwitcherData
.
This is particularly useful if you have different corresponding slugs per locale. For example if you want:
Directoryblog/
- hello-world
Directoryfr/
Directoryle-blog/
- bonjour-le-monde
1---2import type { GetStaticPaths } from "astro";3import { setDynamicParams, getLocalePlaceholder, t } from "i18n:astro";4
5export const getStaticPaths = (() => {6 const locale = getLocalePlaceholder();7
8 const slugs = [9 {10 en: "hello-world",11 fr: "bonjour-le-monde",12 },13 // ...14 ];15
16 return slugs.map((slug) => ({17 params: {18 slug: slug[locale],19 },20 props: {21 slugs: slug,22 },23 }));24}) satisfies GetStaticPaths;25
26const { slug } = Astro.params;27const { slugs } = Astro.props;28
29setDynamicParams(30 Object.entries(slugs).map(([locale, slug]) => ({ locale, params: { slug } }))31);32---
Data shapes
It accepts a single parameter with 2 shapes: object or array.
Object
1setDynamicParams({2 en: {3 slug: 'hello-world'4 },5 fr: {6 slug: 'bonjour-le-monde'7 }8})
Array
More convenient when working with data programmatically
1setDynamicParams([2 {3 locale: "en",4 params: {5 slug: "hello-world"6 }7 },8 {9 locale: "fr",10 params: {11 slug: "bonjour-le-monde"12 }13 }14])