read

indicators.read(params): Promise<{ locale, prefs, flags }>
indicators.locale.read(params): Promise<Locale>
indicators.prefs.read(params): Promise<Prefs>
indicators.flags.read(params): Promise<Flags>

What a route's params name. params is the promise Next passes to a layout or page, or an already resolved object.

export default async function Page({ params }: PageProps<'/[locale]/[prefs]/[flags]/login'>) {
  const { locale, prefs, flags } = await indicators.read(params)
  return <Form locale={locale} theme={prefs.theme ?? 'system'} />
}

prefs and flags are objects keyed by indicator, each value one of its names or undefined, typed from the config. The combined form needs all three params, so it belongs at or below the flags segment; the per-level forms need only their own.

Not found

A value the config cannot decode calls notFound(): an unsupported locale, an unknown key or value, or a segment that is not in canonical form. The nearest not-found.tsx renders. This is deliberate — see Layouts.

Notes

Only the params are read. Nothing here touches cookies() or headers(), which is what keeps the page static.