рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдХреЛ рдкреВрдЫреЗрдВ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕ рдкреГрд╖реНрда рдФрд░ рдЖрдкрдХреЗ рдЪреБрдиреЗ рд╣реБрдП AI рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рд╕рдВрд╕реНрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕
- "`onLocaleChange` рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `replace` рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛"v8.0.026/1/2026
- "рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЗрддрд┐рд╣рд╛рд╕"v5.5.1029/6/2025
рдЗрд╕ рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рдПрдХ AI рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХреА рдЧрдИ рд╣реИред
рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдореВрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦреЗрдВрдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ GitHub рдкрд░ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдХреЗ рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП GitHub рд▓рд┐рдВрдХрджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ Markdown рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
Next.js рдПрдХреАрдХрд░рдг: next-intlayer рдХреЗ рд▓рд┐рдП useLocale рд╣реБрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг
рдпрд╣ рдЕрдиреБрднрд╛рдЧ next-intlayer рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рднреАрддрд░ Next.js рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд useLocale рд╣реБрдХ рдкрд░ рд╡рд┐рд╕реНрддреГрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
Next.js рдореЗрдВ useLocale рдХреЛ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдирд╛
рдЕрдкрдиреЗ Next.js рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ useLocale рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЕрдиреБрд╕рд╛рд░ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ:
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдЙрдкрдпреЛрдЧ
рдпрд╣рд╛рдБ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ Next.js рдХреЙрдореНрдкреЛрдиреЗрдВрдЯ рдХреЗ рднреАрддрд░ useLocale рд╣реБрдХ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
"use client";
import type { FC } from "react";
import { Locales } from "intlayer";
import { useLocale } from "next-intlayer";
const LocaleSwitcher: FC = () => {
const { locale, defaultLocale, availableLocales, setLocale } = useLocale();
return (
<div>
<h1>рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рдиреАрдп: {locale}</h1>
<p>рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдерд╛рдиреАрдп: {defaultLocale}</p>
<select value={locale} onChange={(e) => setLocale(e.target.value)}>
{availableLocales.map((loc) => (
<option key={loc} value={loc}>
{loc}
</option>
))}
</select>
</div>
);
};
рдкреИрд░рд╛рдореАрдЯрд░
useLocale рд╣реБрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
onLocaleChange: рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ URL рдХреЛ рдХреИрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣"replace","push"рдпрд╛"none"рд╣реЛ рд╕рдХрддрд╛ рд╣реИредрдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВ:
- рдЖрдк
/fr/homeрдкрд░ рд╣реИрдВ - рдЖрдк
/fr/aboutрдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ - рдЖрдк рд╕реНрдерд╛рдиреАрдп рдХреЛ
/es/aboutрдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ - рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ "рдкреАрдЫреЗ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ
onLocaleChangeрдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рднрд┐рдиреНрди рд╣реЛрдЧрд╛:"replace"(рдбрд┐рдлрд╝реЙрд▓реНрдЯ): рд╡рд░реНрддрдорд╛рди URL рдХреЛ рдирдП рд╕реНрдерд╛рдиреАрдпрдХреГрдд URL рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдХреБрдХреА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред -> "рдкреАрдЫреЗ" рдмрдЯрди/es/homeрдкрд░ рдЬрд╛рдПрдЧрд╛"push": рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдирдпрд╛ рд╕реНрдерд╛рдиреАрдпрдХреГрдд URL рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдХреБрдХреА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред -> "рдкреАрдЫреЗ" рдмрдЯрди/fr/aboutрдкрд░ рдЬрд╛рдПрдЧрд╛"none": рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ URL рдмрджрд▓реЗ рдмрд┐рдирд╛ рдХреБрдХреА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред -> "рдкреАрдЫреЗ" рдмрдЯрди/fr/homeрдкрд░ рдЬрд╛рдПрдЧрд╛(locale) => void: рдХреБрдХреА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редundefinedрд╡рд┐рдХрд▓реНрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирдП рд╕реНрдерд╛рдиреАрдп рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдПLinkрдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг:tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
- рдЖрдк
рд░рд┐рдЯрд░реНрди рдорд╛рди
рдЬрдм рдЖрдк useLocale hook рдХреЛ invoke рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд properties рд╡рд╛рд▓реА рдПрдХ object return рдХрд░рддрд╛ рд╣реИ:
locale: рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рдиреАрдп рдЬреЛ React рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредdefaultLocale: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рд╛рдердорд┐рдХ рд╕реНрдерд╛рдиреАрдпредavailableLocales: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╕реНрдерд╛рдиреАрдпрдпреЛрдВ рдХреА рд╕реВрдЪреАредsetLocale: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд╛рдиреАрдп рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ URL рдХреЛ рддрджрдиреБрд╕рд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╣ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдирд┐рдпрдореЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ, рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд╛рдиреАрдп рдХреЛ рдкрде рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдиреЗрд╡рд┐рдЧреЗрд╢рди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреИрд╕реЗpushрдФрд░refreshрдХреЗ рд▓рд┐рдПnext/navigationрд╕реЗuseRouterрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИредpathWithoutLocale: рдПрдХ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдХреЗ рдмрд┐рдирд╛ рдкрде рд▓реМрдЯрд╛рддреА рд╣реИред рдпрд╣ URL рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рдиреАрдпfrрд╣реИ, рдФрд░ URLfr/my_pathрд╣реИ, рддреЛ рд╕реНрдерд╛рдиреАрдп рдХреЗ рдмрд┐рдирд╛ рдкрде/my_pathрд╣реЛрдЧрд╛ред рд╡рд░реНрддрдорд╛рди рдкрде рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПnext/navigationрд╕реЗusePathnameрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
next-intlayer рд╕реЗ useLocale рд╣реБрдХ Next.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрдкрдХрд░рдг рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдИ рд╕реНрдерд╛рдиреАрдпрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреАрдХреГрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдерд╛рдиреАрдп рд╕рдВрдЧреНрд░рд╣рдг, рд╕реНрдерд┐рддрд┐ рдкреНрд░рдмрдВрдзрди, рдФрд░ URL рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рд╕рд╣рдЬрддрд╛ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
