рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдХреЛ рдкреВрдЫреЗрдВ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕ рдкреГрд╖реНрда рдФрд░ рдЖрдкрдХреЗ рдЪреБрдиреЗ рд╣реБрдП AI рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдЗрд╕ рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рдПрдХ AI рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХреА рдЧрдИ рд╣реИред
рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдореВрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦреЗрдВрдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ GitHub рдкрд░ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдХреЗ рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП GitHub рд▓рд┐рдВрдХрджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ Markdown рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
next-intl рдмрдирд╛рдо Intlayer: React рдФрд░ Next.js рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг (i18n) рдмреЗрдВрдЪрдорд╛рд░реНрдХ

next-intl Next.js рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп i18n рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред Intlayer рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░-рдЖрдзрд╛рд░рд┐рдд, рдШрдЯрдХ-рдХреНрд╖реЗрддреНрд░реАрдп рд╡рд┐рдХрд▓реНрдк рд╣реИред рджреЛрдиреЛрдВ App Router рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдРрдк рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рддреНрдпреЗрдХ рдХреА рд▓рд╛рдЧрдд рдХреНрдпрд╛ рд╣реИред
рдпрд╣ рд▓реЗрдЦ рдХреЛрдИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдирд╣реАрдВ рд╣реИред рдпрд╣ Benchmark Bloom рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдПрдХ рддреБрд▓рдирд╛ рд╣реИ, рдЬреЛ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реВрдЯ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдорд╛рдкрддрд╛ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ (tl;dr):next-intlрдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдЬ рдкрд░ +12.6 KB gzip рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯрдЕрдк (staticрдФрд░dynamic) рдореЗрдВ ~90% рдЕрдиреНрдп рдкреЗрдЬреЛрдВ рдХреА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд▓реАрдХ рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рд▓реАрдХреЗрдЬ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрдЯрд▓реЙрдЧ рдХреЛ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪреБрдирдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдХрдард┐рди рдХрд╛рдо рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд,IntlayerрдХрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ 0% рд▓реАрдХреЗрдЬ, 3 рдЧреБрдирд╛ рдЫреЛрдЯреЗ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕, рдФрд░ рдмреЗрд╕ рдРрдк рд╕реЗ рдХреЗрд╡рд▓ +0.3 KB рдЕрдзрд┐рдХ рд╕рд╛рдЗрдЬрд╝ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ
- next-intl - Next.js рд╕рдореБрджрд╛рдп рдХрд╛ рдорд╛рдирдХред рдкреНрд░рддрд┐ рднрд╛рд╖рд╛ рдХреЗрдВрджреНрд░реАрдХреГрдд JSON рдбрд┐рдХреНрд╢рдирд░реА, рдкреВрд░реНрдг ICU MessageFormat рд╕рдорд░реНрдерди, рдФрд░ Next.js рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдФрд░ рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЧрд╣рд░рд╛ рдПрдХреАрдХрд░рдгред
- Intlayer - рдХрдВрдкреЛрдиреЗрдВрдЯ-рдХреЗрдВрджреНрд░рд┐рдд рдХрдВрдЯреЗрдВрдЯ рдореЙрдбрд▓ред
.content.tsрдлрд╛рдЗрд▓реЗрдВ рдЕрдкрдиреЗ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдмреИрдарддреА рд╣реИрдВ, рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдХрдВрдкрд╛рдЗрд▓рд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐ рдХрдВрдкреЛрдиреЗрдВрдЯ рдФрд░ рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдЯреНрд░реА-рд╢реЗрдХ рдФрд░ рд▓реЗрдЬрд╝реА-рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдЦреНрдд TypeScript рдкреНрд░рдХрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рд╕рднреА рдбреЗрдЯрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдореЛрдбрд▓ рдореЗрдВ рдЦреЛрд▓реЗрдВ
рдмреИрдЬ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред
рдЖрдордиреЗ-рд╕рд╛рдордиреЗ рд╕реБрд╡рд┐рдзрд╛ рддреБрд▓рдирд╛
рд╕рднреА рдбреЗрдЯрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдореЛрдбрд▓ рдореЗрдВ рдЦреЛрд▓реЗрдВ
| рд╕реБрд╡рд┐рдзрд╛ | Intlayer (react-intlayer / next-intlayer) | next-intl (next-intl / use-intl) |
|---|---|---|
| рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдЕрдиреБрд╡рд╛рдж | тЬЕ рд╣рд╛рдБ, рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдмрдЧрд▓ рдореЗрдВ .content.ts рдореМрдЬреВрдж | тЭМ messages/ рдореЗрдВ рдХреЗрдВрджреНрд░реАрдХреГрдд JSON рдбрд┐рдХреНрд╢рдирд░реА |
| TypeScript рдПрдХреАрдХрд░рдг | тЬЕ рдХрдВрдЯреЗрдВрдЯ рд╕реЗ рдСрдЯреЛ-рдЬрдирд░реЗрдЯреЗрдб рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ | тЪая╕П рд╕рдВрджреЗрд╢ рдкрдереЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ global.d.ts рд╕реЗрдЯрдЕрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд░реНрдерд┐рдд |
| рдЧрд╛рдпрдм рдЕрдиреБрд╡рд╛рджреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ | тЬЕ TypeScript рдПрд░рд░ + рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдПрд░рд░/рдЪреЗрддрд╛рд╡рдиреА | тЪая╕П рд░рдирдЯрд╛рдЗрдо рдЧрд╛рдпрдм рдХреБрдВрдЬреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ |
| рд░рд┐рдЪ рдХрдВрдЯреЗрдВрдЯ (JSX / Markdown / рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕) | тЬЕ рд╕реАрдзрд╛ рд╕рдорд░реНрдерди | тЪая╕П рдореИрдкрд┐рдВрдЧ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде t.rich() рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ |
| ICU рд╕рдорд░реНрдерди | тЪая╕П рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдкрд░ | тЬЕ рд╣рд╛рдБ, рдкреВрд░реНрдг ICU рд╕рдорд░реНрдерди |
| рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ | тЬЕ next-intlayer/server рд╕реЗ useIntlayer рдХрд┐рд╕реА рднреА рдЪрд╛рдЗрд▓реНрдб рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ | тЭМ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рд░реНрд╡рд░ рдкреИрд░реЗрдВрдЯ рд╕реЗ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ |
| рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ (Tree-shaking) | тЬЕ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд (рдкреНрд░рддрд┐ рдХрдВрдкреЛрдиреЗрдВрдЯ, рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓) | тЪая╕П рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ pick() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ |
| рд▓реЗрдЬрд╝реА рд▓реЛрдбрд┐рдВрдЧ (Lazy loading) | тЬЕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ (importMode: 'dynamic') | тЪая╕П getRequestConfig рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рдбрд╛рдпрдиреЗрдорд┐рдХ рдЗрдореНрдкреЛрд░реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ |
| рд╡рд┐рдЬреБрдЕрд▓ рдПрдбрд┐рдЯрд░ / CMS | тЬЕ рдирд┐рдГрд╢реБрд▓реНрдХ рд╡рд┐рдЬреБрдЕрд▓ рдПрдбрд┐рдЯрд░ + рд╡реИрдХрд▓реНрдкрд┐рдХ CMS | тЭМ рдирд╣реАрдВ |
| AI-рд╕рдВрдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рдж | тЬЕ рдмрд┐рд▓реНрдЯ-рдЗрди, рдЖрдкрдХреА рдЕрдкрдиреА рдкреНрд░рджрд╛рддрд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ | тЭМ рдирд╣реАрдВ |
| MCP рд╕рд░реНрд╡рд░ рдФрд░ рдПрдЬреЗрдВрдЯ рд╕реНрдХрд┐рд▓реНрд╕ | тЬЕ рд╣рд╛рдБ | тЭМ рдирд╣реАрдВ |
рдмреЗрдВрдЪрдорд╛рд░реНрдХ
рдХреНрдпрд╛ рдорд╛рдкрд╛ рдЧрдпрд╛ рдерд╛
Benchmark Bloom рдЯреЗрд╕реНрдЯ рд╕реБрдЗрдЯ рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддрд╛ рд╣реИ: 10 рдкреЗрдЬ (home, about, blog, careers, contact, FAQ, pricing, products, settings, team), 10 рд▓реЛрдХреЗрд▓ (en, fr, es, de, it, pt, zh, ja, ko, ru), рд╕рдорд╛рди рдХрдВрдкреЛрдиреЗрдВрдЯ рдФрд░ рд╕рдорд╛рди рдХрдВрдЯреЗрдВрдЯред рдкреЗрдЬреЛрдВ рдХреЛ en рдФрд░ fr рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЪрд╛рд░ рд▓реЛрдбрд┐рдВрдЧ рд░рдгрдиреАрддрд┐рдпреЛрдВ рддрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рд╕рднреА рдбреЗрдЯрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдореЛрдбрд▓ рдореЗрдВ рдЦреЛрд▓реЗрдВ
| рд░рдгрдиреАрддрд┐ | рд╡рд┐рд╡рд░рдг | рдпрд╣ рдХреМрди рдХрд░рддрд╛ рд╣реИ |
|---|---|---|
| static | рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдХреЗрд▓ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдЬ рдХреЛ рдПрдХ рд╕рд╛рде рдмрдВрдбрд▓ рдХрд░рдХреЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ | рддреНрд╡рд░рд┐рдд рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, AI-рдЬрдирд░реЗрдЯреЗрдб рдХреЛрдб |
| dynamic | рдХреЗрд╡рд▓ рд╕рдХреНрд░рд┐рдп рд▓реЛрдХреЗрд▓ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдкреЗрдЬ рдПрдХ рд╕рд╛рде | рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ |
| scoped-static | рдкреНрд░рддрд┐ рд░реВрдЯ рдиреЗрдорд╕реНрдкреЗрд╕, рдХреЛрдИ рд▓реЗрдЬрд╝реА рд▓реЛрдбрд┐рдВрдЧ рдирд╣реАрдВ | рджреБрд░реНрд▓рдн |
| scoped-dynamic | рдкреНрд░рддрд┐ рд░реВрдЯ рдиреЗрдорд╕реНрдкреЗрд╕ + рд▓реЗрдЬрд╝реА рд▓реЛрдбрд┐рдВрдЧред рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдкреЗрдЬ рдФрд░ рд╡рд░реНрддрдорд╛рди рд▓реЛрдХреЗрд▓ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ | рд╕рдЦреНрдд рдкреНрд░рджрд░реНрд╢рди рдмрдЬрдЯ рд╡рд╛рд▓реЗ рдРрдкреНрд╕ |
Intlayer рдореЗрдВ рдХреЛрдИ "scoped" рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИ: рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдХреЛрдк рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА static рдФрд░ dynamic рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдХреЛрдкреНрдб рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП, рд╕реБрдЗрдЯ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ:
- Lib size: рдХреЗрд╡рд▓ i18n рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЦрд╛рд▓реА рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╛ gzip рдЖрдХрд╛рд░ред
- Page JS: рдкреНрд░рддрд┐ рдкреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ gzip рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯред
- Locale leak %: рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП JS рдореЗрдВ рдкрд╛рдП рдЧрдП рдЕрдиреВрджрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛ рдЙрд╕ рд▓реЛрдХреЗрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реИред
- Page leak %: рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП JS рдореЗрдВ рдкрд╛рдП рдЧрдП рдЕрдиреВрджрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛ рдЙрд╕ рдкреЗрдЬ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реИред
- Component avg: рдЕрд▓рдЧ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓ рдХрд┐рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╛ рдФрд╕рдд gzip рдЖрдХрд╛рд░ред
- E2E reactivity: рдирдпрд╛ рд▓реЛрдХреЗрд▓ рдЪреБрдирдиреЗ рдФрд░ DOM рдореЗрдВ
html[lang]рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдмреАрдЪ рдХрд╛ рд╕рдордпред - Hydration: React рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдЪрд░рдг рдХреА рдЕрд╡рдзрд┐ред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ 2026-09-12 рдХреЗ рд░рди рд╕реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВnext-intl4.14.2 рдФрд░intlayer9.5.1 рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
Next.js (App Router) рдкрд░ рдкрд░рд┐рдгрд╛рдо
рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЪреБрдиреЗрдВ:
рдореАрдЯреНрд░рд┐рдХ
рдбрд╛рдпрдирд╛рдорд┐рдХ JSON рд▓реЛрдбрд┐рдВрдЧ
рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЖрд▓рд╕реНрдп рд╕реЗ рдЕрдиреБрд╡рд╛рдж рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ
рд╕реНрдХреЛрдкреНрдб JSON (рдиреЗрдорд╕реНрдкреЗрд╕рд┐рдВрдЧ)
рдкреНрд░рддрд┐-рдкреГрд╖реНрда рдЕрдиреБрд╡рд╛рдж рдиреЗрдорд╕реНрдкреЗрд╕
рдпрд╣ рдореАрдЯреНрд░рд┐рдХ рдХреНрдпрд╛ рд╣реИ?
рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдВрдбрд▓ рдХрд╛ рдХреБрд▓ gzip-рд╕рдВрдкреАрдбрд╝рд┐рдд рдЖрдХрд╛рд░ред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ рдФрд░ рдорд┐рдирд┐рдлрд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рдж рдкреНрд░рджрд╛рддрд╛ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИ?
рдПрдХ рдЫреЛрдЯрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдХрд╛рд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреЗрд▓реЛрдб рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рддреЗрдЬрд╝ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд╣реЛрддрд╛ рд╣реИред
рджреЗрдЦрдиреЗ рдХрд╛ рддрд░реАрдХрд╛
рд╕рднреА рдбреЗрдЯрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдореЛрдбрд▓ рдореЗрдВ рдЦреЛрд▓реЗрдВ
| рд▓рд╛рдЗрдмреНрд░реЗрд░реА | рд░рдгрдиреАрддрд┐ | рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рд╛рдЗрдЬрд╝ (gz) | рдкреЗрдЬ JS рдФрд╕рдд (gz) | рд▓реЛрдХреЗрд▓ рд▓реАрдХ | рдкреЗрдЬ рд▓реАрдХ | рдХрдВрдкреЛрдиреЗрдВрдЯ рдФрд╕рдд (gz) | E2E рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ | рд╣рд╛рдЗрдбреНрд░реЗрд╢рди |
|---|---|---|---|---|---|---|---|---|
| base (рдмрд┐рдирд╛ i18n) | - | 0.0 KB | 141.0 KB | 0.0% | 0.0% | 0.9 KB | 13.4 ms | 11.8 ms |
next-intl | static | 14.7 KB | 153.6 KB | 4.2% | 89.8% | 21.8 KB | 16.0 ms | 14.7 ms |
next-intl | dynamic | 14.7 KB | 153.6 KB | 9.7% | 89.9% | 21.8 KB | 15.6 ms | 14.8 ms |
next-intl | scoped-static | 14.7 KB | 153.6 KB | 0.0% | 0.0% | 80.1 KB | 17.9 ms | 17.4 ms |
next-intl | scoped-dynamic | 14.7 KB | 153.6 KB | 0.0% | 0.0% | 22.9 KB | 17.8 ms | 16.8 ms |
next-intlayer | static | 5.5 KB | 141.3 KB | 0.0% | 0.0% | 8.5 KB | 15.5 ms | 16.9 ms |
next-intlayer | dynamic | 5.5 KB | 141.3 KB | 0.0% | 0.0% | 6.9 KB | 15.3 ms | 15.9 ms |
@intlayer/next-intl (рд╕рдВрдЧрддрддрд╛) | static | 8.0 KB | 147.5 KB | 0.0% | 0.0% | 8.1 KB | 14.5 ms | 12.8 ms |
@intlayer/next-intl (рд╕рдВрдЧрддрддрд╛) | dynamic | 8.0 KB | 148.7 KB | 0.0% | 0.0% | 8.1 KB | 11.7 ms | 12.8 ms |
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдордЭреЗрдВ
- рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЧрддред рдмреЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди 141.0 KB рдкреНрд░рддрд┐ рдкреЗрдЬ рд╣реИред
next-intlрдЗрд╕реЗ 153.6 KB (рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдЬ рдкрд░ +12.6 KB gzip) рддрдХ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ Intlayer рдЗрд╕реЗ рдХреЗрд╡рд▓ 141.3 KB (+0.3 KB) рддрдХ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред - рд▓реАрдХреЗрдЬред рд╕рдмрд╕реЗ рдЖрдо рд╕реЗрдЯрдЕрдк (
staticрдФрд░dynamic) рдореЗрдВ,next-intlрд╣рд░ рдкреЗрдЬ рдкрд░ ~90% рдЕрдиреНрдп рдкреЗрдЬреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рднреЗрдЬрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реАen.jsonрдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдореЗрдВ рдЬрд╛рддреА рд╣реИред 0% рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдореИрдиреБрдЕрд▓ рд╡рд┐рднрд╛рдЬрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдмрдХрд┐ Intlayer рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ 0% рдкрд░ рд╣реИред - рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕рд╛рдЗрдЬрд╝ред
useTranslations()рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрдВрдкреЛрдиреЗрдВрдЯ рдФрд╕рддрди 21.8 KB рдХрд╛ рд╣реЛрддрд╛ рд╣реИ;useIntlayer()рдХреЗ рд╕рд╛рде рд╡рд╣реА рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗрд╡рд▓ 6.9 KB рдХрд╛ рд╣реЛрддрд╛ рд╣реИред
рдкреВрд░реА рддрд╛рд▓рд┐рдХрд╛, рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рд░рдгрдиреАрддрд┐, Next.js рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
TanStack Start (use-intl) рдкрд░ рдкрд░рд┐рдгрд╛рдо
use-intl next-intl рдХрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ-рдЕрдЬреНрдЮреЗрдп рдХреЛрд░ рд╣реИред рд╡рд╣реА API, рд╡рд╣реА рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рд░реВрдкред TanStack Start рдкрд░ intlayer рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рддреБрд▓рдирд╛ Next.js-рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рдЧреЛрдВ рдХреЛ рд╕рдореАрдХрд░рдг рд╕реЗ рд╣рдЯрд╛ рджреЗрддреА рд╣реИред
рд╕рднреА рдбреЗрдЯрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдореЛрдбрд▓ рдореЗрдВ рдЦреЛрд▓реЗрдВ
| рд▓рд╛рдЗрдмреНрд░реЗрд░реА | рд░рдгрдиреАрддрд┐ | рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рд╛рдЗрдЬрд╝ (gz) | рдкреЗрдЬ JS рдФрд╕рдд (gz) | рд▓реЛрдХреЗрд▓ рд▓реАрдХ | рдкреЗрдЬ рд▓реАрдХ | рдХрдВрдкреЛрдиреЗрдВрдЯ рдФрд╕рдд (gz) | E2E рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ |
|---|---|---|---|---|---|---|---|
| base (рдмрд┐рдирд╛ i18n) | - | 0.0 KB | 111.0 KB | 0.0% | 0.0% | 0.7 KB | 8.1 ms |
use-intl | static | 14.1 KB | 179.8 KB | 50.0% | 89.8% | 76.0 KB | 6.7 ms |
use-intl | dynamic | 14.1 KB | 119.4 KB | 0.0% | 89.8% | 75.9 KB | 7.0 ms |
use-intl | scoped-static | 14.1 KB | 128.7 KB | 0.0% | 0.0% | 87.1 KB | 20.9 ms |
use-intl | scoped-dynamic | 14.1 KB | 128.7 KB | 0.0% | 0.0% | 87.1 KB | 13.3 ms |
intlayer | static | 5.0 KB | 125.8 KB | 50.0% | 0.0% | 8.1 KB | 3.2 ms |
intlayer | dynamic | 5.0 KB | 118.6 KB | 0.0% | 0.0% | 6.3 KB | 3.6 ms |
@intlayer/use-intl (рд╕рдВрдЧрддрддрд╛) | dynamic | 7.3 KB | 129.7 KB | 0.0% | 0.0% | 9.3 KB | 8.7 ms |
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдордЭреЗрдВ
- рд╕рд░рд▓
use-intlрд╕реЗрдЯрдЕрдк рдмреЗрд╕ рдРрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рддрд┐ рдкреЗрдЬ 68.8 KB рдЕрдзрд┐рдХ JS рднреЗрдЬрддрд╛ рд╣реИред dynamicрдореЛрдб рдореЗрдВ,use-intl119.4 KB рдкрд░ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА 89.8% рдкреЗрдЬ рд▓реАрдХреЗрдЬ рд╡рд╣рди рдХрд░рддрд╛ рд╣реИред- рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЕрдВрддрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ:
use-intlрдХреЗ рд╕рд╛рде 76-87 KB рдмрдирд╛рдо Intlayer рдХреЗ рд╕рд╛рде 6-8 KBред - рд▓реЛрдХреЗрд▓ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ Intlayer рдХреЗ рд╕рд╛рде 2x-4x рддреЗрдЬрд╝ рд╣реИ (3 ms рдмрдирд╛рдо 7-21 ms)ред
рдкреВрд░реА рддрд╛рд▓рд┐рдХрд╛ TanStack Start рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдЕрдВрддрд░ рдХреНрдпреЛрдВ рд╣реИ? рдХреЗрдВрджреНрд░реАрдХреГрдд рдХреИрдЯрд▓реЙрдЧ рдмрдирд╛рдо рдХрдВрдкрд╛рдЗрд▓ рдХреА рдЧрдИ рдбрд┐рдХреНрд╢рдирд░реА

next-intl рдХреНрд▓рд╛рд╕рд┐рдХ рдореЙрдбрд▓ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ: рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдПрдХ JSON, рдЬреЛ getRequestConfig рдореЗрдВ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, NextIntlClientProvider рдореЗрдВ рдкрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ t("namespace.key") рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рд░рдирдЯрд╛рдЗрдо рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддрд╛ рдХрд┐ рдХреЛрдИ рдкреЗрдЬ рдХрд┐рди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдХреИрдЯрд▓реЙрдЧ рднреЗрдЬрдирд╛ рд╣реА рд╕реБрд░рдХреНрд╖рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред
рд╡рд╣рд╛рдВ рддрдХ рди рдкрд╣реБрдБрдЪрдиреЗ рдХреА рд▓рд╛рдЧрдд рджреЛ рдЕрдХреНрд╖реЛрдВ рдкрд░ рдПрдХ рд╕рд╛рде рдмрдврд╝рддреА рд╣реИ, рдкреГрд╖реНрда рдФрд░ рднрд╛рд╖рд╛рдПрдБ:

Intlayer рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рд╕рд╛рдордЧреНрд░реА рд╕реАрдзреЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░, рдХрдВрдкрд╛рдЗрд▓рд░ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреМрди рд╕реА рдбрд┐рдХреНрд╢рдирд░реА рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рд╕рдХреНрд░рд┐рдп рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рдЙрди рдбрд┐рдХреНрд╢рдирд░реА рдХреЛ рдмрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИред
dynamicрдкрдВрдХреНрддрд┐ рдХреЗ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,intlayer.config.tsрдореЗрдВdictionary.importMode: 'dynamic'рд╕реЗрдЯ рдХрд░реЗрдВред рдмрдВрдбрд▓ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред
рдбреЗрд╡рд▓рдкрд░ рдЕрдиреБрднрд╡
рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдЗрд╕ рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░NextIntlClientProviderрдХреЛ рджрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВcounterрдиреЗрдорд╕реНрдкреЗрд╕ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВред
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдкреГрд╖реНрда рдкрд░ рдХреБрдЫ рднреА рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдШрдЯрдХ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рд╕реНрд╡рдпрдВ рд▓рд╛рддрд╛ рд╣реИред
рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ
рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдШрдЯрдХ (рдЬреИрд╕реЗ рдиреЗрд╡рдмрд╛рд░, рдлреВрдЯрд░, рдХрд╛рд░реНрдб) рдЕрдХреНрд╕рд░ рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдЪрд┐рд▓реНрдбреНрд░рди рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ async рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдкреГрд╖реНрда рдХреЛ await getTranslations("counter") рдФрд░ await getFormatter() рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдиреАрдЪреЗ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдШрдЯрдХ рдЕрдм рдЖрддреНрдордирд┐рд░реНрднрд░ рдирд╣реАрдВ рд░рд╣рд╛ред
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдореЗрдЯрд╛рдбреЗрдЯрд╛ (Metadata)
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
next-intl API рдмрдирд╛рдП рд░рдЦреЗрдВ, Intlayer рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рдЙрдкрд░реЛрдХреНрдд рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рджреЛрдмрд╛рд░рд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред @intlayer/next-intl рдПрдХ рдбреНрд░реЙрдк-рдЗрди рдПрдбреЗрдкреНрдЯрд░ рд╣реИ: рдпрд╣ useTranslations, getTranslations, useFormatter, t.rich() рдФрд░ ICU рдкреНрд▓реБрд░рд▓реНрд╕ рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ Intlayer рдбрд┐рдХреНрд╢рдирд░реА рд╕реЗ рдкрд░реЛрд╕рддрд╛ рд╣реИред
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ, рдЗрд╕реА рдРрдк рдХрд╛ рдХрдВрдкреИрдЯ рдмрд┐рд▓реНрдб рдкреНрд░рддрд┐ рдкреЗрдЬ 153.6 KB рд╕реЗ рдШрдЯрдХрд░ 147.5 KB, рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕рд╛рдЗрдЬрд╝ 21.8 KB рд╕реЗ рдШрдЯрдХрд░ 8.1 KB, рдФрд░ рдкреЗрдЬ рд▓реАрдХреЗрдЬ ~90% рд╕реЗ рдШрдЯрдХрд░ 0% рд╣реЛ рдЧрдпрд╛ред рдЖрдкрдХреА рдореМрдЬреВрджрд╛ messages/{locale}.json рдлрд╛рдЗрд▓реЗрдВ JSON рд╕рд┐рдВрдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рддреНрдп рдХрд╛ рд╕реНрд░реЛрдд рдмрдиреА рд░рд╣ рд╕рдХрддреА рд╣реИрдВред
рдЪрд░рдг-рджрд░-рдЪрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП next-intl рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВред
рдХрдм рдХрд┐рд╕реЗ рдЪреБрдиреЗрдВ?
рдЖрдк Next.js рдХреЗ рд▓рд┐рдП рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдорд╛рдирдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, ICU MessageFormat рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдкрдХрд╛ рдРрдк рдЫреЛрдЯреЗ рд╕реЗ рдордзреНрдпрдо рдЖрдХрд╛рд░ рдХрд╛ рд╣реИ, рдпрд╛ рдЖрдк рдХрд┐рд╕реА рдРрд╕реЗ рдЕрдиреБрд╡рд╛рдж рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (Crowdin, Phrase, Lokalise...) рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрдВрджреНрд░реАрдХреГрдд JSON рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░рджрд░реНрд╢рди рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рддреЛ рдХреИрдЯрд▓реЙрдЧ рдХреЛ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐ рдкреГрд╖реНрда pick() рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓реЗрдВред
рдЖрдк рдХрдВрдкреЛрдиреЗрдВрдЯ-рд╕реНрдХреЛрдкреНрдб рд╕рд╛рдордЧреНрд░реА, рд╕рдЦреНрдд TypeScript, рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдЧреБрдо рдХреБрдВрдЬреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рдкреНрд░рдпрд╛рд╕рд╣реАрди рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ рдФрд░ рд▓реЗрдЬрд╝реА рд▓реЛрдбрд┐рдВрдЧ, рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдВрдкрд╛рджрдХреАрдп рдЙрдкрдХрд░рдг (рд╡рд┐рдЬреБрдЕрд▓ рдПрдбрд┐рдЯрд░, CMS, AI рдЕрдиреБрд╡рд╛рдж, MCP рд╕рд░реНрд╡рд░) рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдмрдбрд╝реЗ, рдореЙрдбреНрдпреВрд▓рд░ рдХреЛрдбрдмреЗрд╕ рдФрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХред
рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА next-intl рдкрд░ рд╣реИрдВ рдФрд░ рдмрд┐рдирд╛ рджреЛрдмрд╛рд░рд╛ рд▓рд┐рдЦреЗ рдмрдВрдбрд▓ рд▓рд╛рдн рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдПрдбреЗрдкреНрдЯрд░ рдЖрдкрдХреЗ рдЗрдореНрдкреЛрд░реНрдЯ рдФрд░ рдЖрдкрдХреА messages/{locale}.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рддреНрдп рдХреЗ рдПрдХрд▓ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред next-intl vs @intlayer/next-intl рдореЗрдВ рдПрдХ рд╕рд╛рде рдорд╛рдкрд╛ рдЧрдпрд╛ред
рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди (FAQ)
рд░реЗрдВрдбрд░ рд╕рдордп рдкрд░ рдирд╣реАрдВред рдЕрдВрддрд░ рдЗрд╕рдореЗрдВ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреНрдпрд╛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ: next-intl рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ +12.6 KB gzip рд░рдирдЯрд╛рдЗрдо рдХреА рд▓рд╛рдЧрдд рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реЗрдЯрдЕрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рд╕рд╛рде рд╡рд┐рджреЗрд╢реА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рдЧрднрдЧ 90% рдЯреЗрдХреНрд╕реНрдЯ рднреЗрдЬрддрд╛ рд╣реИред рднрд╛рд╖рд╛ рдмрджрд▓рдирд╛ рдФрд░ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди Next.js рдкрд░ рддреБрд▓рдиреАрдп рд╣реИрдВ (15-18 ms); TanStack Start рдкрд░ use-intl 7-21 ms рд▓реЗрддрд╛ рд╣реИ рдЬрдмрдХрд┐ Intlayer рдХреЗрд╡рд▓ 3-4 ms рд▓реЗрддрд╛ рд╣реИред
рд╣рд╛рдБ, scoped-dynamic рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде: messages/{locale}.json рдХреЛ рдкреНрд░рддрд┐ рд░реВрдЯ рдПрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ, рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдореЗрдВ pick(messages, [...]) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдмрджрд▓рдиреЗ рдкрд░ рдЙрд╕ рдореИрдкрд┐рдВрдЧ рдХреЛ рд╕рд╣реА рдмрдирд╛рдП рд░рдЦреЗрдВред рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреА scoped-* рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдареАрдХ рдЙрд╕реА рдХрд╛рдо рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИрдВред Intlayer рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХреЗ 0% рддрдХ рдкрд╣реБрдБрдЪ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред рдмрдВрдбрд▓ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рджреЗрдЦреЗрдВред
рдирд╣реАрдВред @intlayer/next-intl useTranslations, getTranslations, useFormatter, t.rich(), ICU рдмрд╣реБрд╡рдЪрди рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╢рдмреНрджрдХреЛрд╢реЛрдВ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред next.config.ts рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд▓рдЧрдЗрди рдкрдВрдХреНрддрд┐ред рдЪрд░рдг рджрд░ рдЪрд░рдг next-intl рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЧрд╛рдЗрдб рдореЗрдВ рджреЗрдЦреЗрдВред
рдореВрд▓ API рдкрд░ ICU рд╕рдорд░реНрдерди рдкрд░ рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИред рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдПрдбреЗрдкреНрдЯрд░ (@intlayer/next-intl, @intlayer/use-intl) ICU рдЪрд▓рд╛рддреЗ рд╣реИрдВ: рдмрд╣реБрд╡рдЪрди, select, selectordinal, # рдФрд░ {ts, date, long} Intlayer рдХреЗ ICU рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП ICU рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рд░реВрдк рдкрдврд╝реЗрдВред
рд╣рд╛рдБред JSON рд╕рд┐рдВрдХ рдкреНрд▓рдЧрдЗрди рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рддрд╛ рд╣реИ, рдЙрдирдХреА рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрдм CLI рдпрд╛ CMS рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рдЙрдиреНрд╣реАрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд┐рдЦрддрд╛ рд╣реИред рдЖрдкрдХреЗ рдЕрдиреБрд╡рд╛рджрдХреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред
рд╕рдВрдмрдВрдзрд┐рдд рддреБрд▓рдирд╛рдПрдБ
рд╡рд╣реА рдмреЗрдВрдЪрдорд╛рд░реНрдХ, рдЕрдиреНрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝:
next-intl рдкрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗрдВ:
рд╕рдВрджрд░реНрдн рджрд╕реНрддрд╛рд╡реЗрдЬрд╝:
рдпреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╣рд╛рдБ рд╕реЗ рдЖрдИрдВ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП JavaScript i18n рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рдкрдврд╝реЗрдВред
GitHub STARS
GitHub рд╕реНрдЯрд╛рд░ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛, рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдФрд░ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХрд╛ рдПрдХ рдордЬрдмреВрдд рд╕рдВрдХреЗрддрдХ рд╣реИрдВред
рдХрдорд┐рдЯ рдЧрддрд┐рд╡рд┐рдзрд┐
рд╕реНрдЯрд╛рд░ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рдХрдорд┐рдЯ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд┐рддрдирд╛ рдХрд╛рдо рд▓рдЧрд╛ рд╣реИред рд▓рд┐рдЦрддреЗ рд╕рдордп Intlayer рдореЗрдВ рд▓рдЧрднрдЧ 7,500 рдХрдорд┐рдЯ рд╣реИрдВ, рдЬреЛ рдпрд╣рд╛рдБ рддреБрд▓рдирд╛ рдХреА рдЧрдИ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рд╣реИрдВ рдФрд░ next-intl рдпрд╛ next-i18next рд╕реЗ рд▓рдЧрднрдЧ 5 рдЧреБрдирд╛ред
- amannn/next-intl
- aymericzip/intlayer
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреНрд░рд╛рдВрдЪ рдкрд░ рдХрдорд┐рдЯ, рд╕реНрд░реЛрдд: GitHub APIред
Intlayer рдПрдХ рдореЛрдиреЛрд░реЗрдкреЛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╣рд░ рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рдкреИрдХреЗрдЬ, CLI рдФрд░ рдбреЙрдХреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдХрдорд┐рдЯ рдХреЛ рдЧреБрдгрд╡рддреНрддрд╛ рдирд╣реАрдВ, рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рдорд╛рдиреЗрдВред
npm рдбрд╛рдЙрдирд▓реЛрдб
- next-intl
- next-intlayer
рд╕реНрд░реЛрдд: npm рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдбрд╛рдЙрдирд▓реЛрдб APIред
рдбрд╛рдЙрдирд▓реЛрдб рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдкреБрд░рд╕реНрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдХреЛ рдирд╣реАрдВред рд╡рд░реНрд╖реЛрдВ рдкрд╣рд▓реЗ рдЬрд╛рд░реА рд╣реБрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдЬ рднреА рд╣рд░ рдЙрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдиреЗ рдЙрд╕реЗ рддрдм рдЪреБрдирд╛ рдерд╛, рд╣рд░ CI рд░рди рдореЗрдВ рдФрд░ рд╣рд░ рдЙрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЛ рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдирдП рдЪреБрдирд╛рд╡ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрдбрд╝рддрд╛ рдХреЛ рдорд╛рдкрддреА рд╣реИред
AI рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдЗрд╕ рдкреНрд░рднрд╛рд╡ рдХреЛ рдФрд░ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред next-intl, i18next рдФрд░ vue-i18n рдЙрд╕ рдХреЛрдб рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рд╡реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╣реБрдП, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрдЭрд╛рддреЗ рд╣реИрдВред рд╣рд░ рд╕реБрдЭрд╛рд╡ рдбрд╛рдЙрдирд▓реЛрдб рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдЧрд▓реЗ рд╕реБрдЭрд╛рд╡ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИред рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ, рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддреБрд▓рдирд╛ рдХрд░реЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
next-intl рдПрдХ рдареЛрд╕, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрд░рдХреНрд╖рд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Next.js рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЗрдВрджреНрд░реАрдХреГрдд рдХреИрдЯрд▓реЙрдЧ рдореЙрдбрд▓ рд╣рд░ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рднрд╛рд░ рдбреЗрд╡рд▓рдкрд░ рдкрд░ рдбрд╛рд▓рддрд╛ рд╣реИ: рд╕рд░рд▓ рд╕реЗрдЯрдЕрдк рд▓рдЧрднрдЧ 90% рдЕрдиреНрдп рдкреЗрдЬреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рд▓реАрдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдХреЗрд▓реЗ рд░рдирдЯрд╛рдЗрдо рдХреА рд▓рд╛рдЧрдд рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдЬ рдкрд░ +12.6 KB gzip рд╣реЛрддреА рд╣реИред
Intlayer рдЙрд╕ рдХрд╛рдо рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддрд┐-рдХрдВрдкреЛрдиреЗрдВрдЯ рдбрд┐рдХреНрд╢рдирд░реА, рдкреНрд░рддрд┐-рд▓реЛрдХреЗрд▓ рд▓реЗрдЬрд╝реА рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╣рдЯрд╛рдирд╛ рдмрд┐рд▓реНрдб рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо: +0.3 KB рдкреНрд░рддрд┐ рдкреЗрдЬ, 0% рд▓реАрдХреЗрдЬ, рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ 3 рдЧреБрдирд╛ рдЫреЛрдЯреЗ, рдФрд░ TanStack Start рдкрд░ рд▓реЛрдХреЗрд▓ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ 2x-4x рддреЗрдЬрд╝ред
рд╕рднреА рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛, рдкрд░реАрдХреНрд╖рдг рдРрдкреНрд╕ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ Benchmark Bloom рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП 'Why Intlayer?' рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
рдЕрднреА рддрдХ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВред рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдмрдиреЗрдВред
