Is it possible to use Intlayer with Next.js without [locale] in the page path?
Yes, it's possible to use Intlayer with Next.js without [locale] in the page path. However, it is not recommended to do, because splitting you page page allows to trigger more keyswords on search engines. Your SSR may also be impacted.
If you want to do it, follow the same steps as described in the Intlayer with Next.js guide,
- no src/middleware.ts
- no generateStaticParams
src/app/layout.tsx
Copy code
Copy the code to the clipboard
import type { FC, PropsWithChildren } from "react";const LocaleLayout: FC<PropsWithChildren> = ({ children }) => ( <html lang={undefined} dir={undefined}> <body className={inter.className}>{children}</body> </html>);export default LocaleLayout;src/app/page.tsx
Copy code
Copy the code to the clipboard
import type { FC } from "react";import { ClientComponentExample } from "@components/ClientComponentExample";import { ServerComponentExample } from "@components/ServerComponentExample";import { PageContent } from "@components/pageContent";import { type NextPageIntlayer, IntlayerClientProvider } from "next-intlayer";import { IntlayerServerProvider } from "next-intlayer/server";const Page: FC = () => { return ( <IntlayerServerProvider> <PageContent /> <ServerComponentExample /> <IntlayerClientProvider> <ClientComponentExample /> </IntlayerClientProvider> </IntlayerServerProvider> );};export default Page;src/component/pageContent.ts
Copy code
Copy the code to the clipboard
"use client";import { type FC } from "react";import { useIntlayer } from "next-intlayer";import { useHTMLLanguage } from "@hooks/htmlTextDir";const PageContent: FC = () => { useHTMLLanguage(); const content = useIntlayer("page"); return ( <> <p>{content.getStarted.main}</p> <code>{content.getStarted.pageLink}</code> </> );};src/hooks/htmlTextDir.ts
Copy code
Copy the code to the clipboard
"use client";import { useEffect } from "react";import { getHTMLTextDir } from "intlayer";import { useLocale } from "next-intlayer";export const useHTMLLanguage = () => { const { locale } = useLocale(); useEffect(() => { if (!document) return; document.documentElement.lang = locale; document.documentElement.dir = getHTMLTextDir(locale); }, [locale]);};