рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдХреЛ рдкреВрдЫреЗрдВ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕ рдкреГрд╖реНрда рдФрд░ рдЖрдкрдХреЗ рдЪреБрдиреЗ рд╣реБрдП AI рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдЗрд╕ рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рдПрдХ AI рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХреА рдЧрдИ рд╣реИред
рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдореВрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦреЗрдВрдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ GitHub рдкрд░ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдХреЗ рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП GitHub рд▓рд┐рдВрдХрджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ Markdown рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
next-i18next рдмрдирд╛рдо next-intl рдмрдирд╛рдо intlayer | Next.js рдЕрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг (i18n)
рдпрд╣ рдЧрд╛рдЗрдб Next.js рдХреЗ рд▓рд┐рдП рддреАрди рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ i18n рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ: next-intl, next-i18next, рдФрд░ Intlayerред рд╣рдо Next.js 13+ App Router (рдЬрд┐рд╕рдореЗрдВ React Server Components рд╢рд╛рдорд┐рд▓ рд╣реИрдВ) рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╣реИрдВ:
- рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рд╕рд╛рдордЧреНрд░реА рд╕рдВрдЧрдарди
- TypeScript рдФрд░ рд╕реБрд░рдХреНрд╖рд╛
- рдЕрдиреБрд╡рд╛рдж рдХреА рдХрдореА рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛
- рд░реВрдЯрд┐рдВрдЧ рдФрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░
- рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░
- рдбреЗрд╡рд▓рдкрд░ рдЕрдиреБрднрд╡ (DX), рдЯреВрд▓рд┐рдВрдЧ рдФрд░ рд░рдЦрд░рдЦрд╛рд╡
- SEO рдФрд░ рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдпреЗ рд╕рднреА рддреАрдиреЛрдВ Next.js рдРрдк рдХреЛ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ-рд╕реНрдХреЛрдкреНрдб рдХрдВрдЯреЗрдВрдЯ, рдХрдареЛрд░ TypeScript рдкреНрд░рдХрд╛рд░, рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдорд┐рд╕рд┐рдВрдЧ-рдХреА рдЬрд╛рдВрдЪ, рдЯреНрд░реА-рд╢реЗрдХреНрдб рдбрд┐рдХреНрд╢рдирд░реАрдЬрд╝, рдФрд░ рдлрд░реНрд╕реНрдЯ-рдХреНрд▓рд╛рд╕ App Router + SEO рд╣реЗрд▓реНрдкрд░реНрд╕, рддреЛ Intlayer рд╕рдмрд╕реЗ рдкреВрд░реНрдг, рдЖрдзреБрдирд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред
рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд╕реНрдерд┐рддрд┐
- next-intl - рд╣рд▓реНрдХрд╛, рд╕рд░рд▓ рд╕рдВрджреЗрд╢ рд╕реНрд╡рд░реВрдкрдг рдЬреЛ рдордЬрдмреВрдд Next.js рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдХреЗрдВрджреНрд░реАрдХреГрдд рдХреИрдЯрд▓реЙрдЧ рдЖрдо рд╣реИрдВ; DX рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд░рдЦрд░рдЦрд╛рд╡ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЖрдкрдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдмрдиреА рд░рд╣рддреА рд╣реИред
- next-i18next - Next.js рдХреЗ рд▓рд┐рдП i18next рдХрд╛ рд░реВрдкред рдкрд░рд┐рдкрдХреНрд╡ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ (рдЬреИрд╕реЗ ICU) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреАрдЪрд░реНрд╕, рд▓реЗрдХрд┐рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рдВрдмрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдврд╝рддреЗ рд╣реИрдВ рдХреИрдЯрд▓реЙрдЧ рдХреЗрдВрджреНрд░реАрдХреГрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
- Intlayer - Next.js рдХреЗ рд▓рд┐рдП рдХрдВрдкреЛрдиреЗрдВрдЯ-рдХреЗрдВрджреНрд░рд┐рдд рдХрдВрдЯреЗрдВрдЯ рдореЙрдбрд▓, рдХрдареЛрд░ TS рдЯрд╛рдЗрдкрд┐рдВрдЧ, рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдЪреЗрдХреНрд╕, рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ, рдЗрди-рдмрд┐рд▓реНрдЯ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдФрд░ SEO рд╣реЗрд▓реНрдкрд░реНрд╕, рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдПрдбрд┐рдЯрд░/CMS, рдФрд░ AI-рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрд╡рд╛рджред
рд╕рд╛рдЗрдб-рдмрд╛рдп-рд╕рд╛рдЗрдб рдлреАрдЪрд░ рддреБрд▓рдирд╛ (Next.js рдХреЗрдВрджреНрд░рд┐рдд)
рд╕рднреА рдбреЗрдЯрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдореЛрдбрд▓ рдореЗрдВ рдЦреЛрд▓реЗрдВ
| рдлреАрдЪрд░ | next-intlayer (Intlayer) | next-intl | next-i18next |
|---|---|---|---|
| рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдЕрдиреБрд╡рд╛рдж | тЬЕ рд╣рд╛рдБ, рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рд╛рдордЧреНрд░реА рд╕рд╣-рд╕реНрдерд┐рдд | тЭМ рдирд╣реАрдВ | тЭМ рдирд╣реАрдВ |
| рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХреАрдХрд░рдг | тЬЕ рдЙрдиреНрдирдд, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ | тЬЕ рдЕрдЪреНрдЫрд╛ | тЪая╕П рдмреБрдирд┐рдпрд╛рджреА |
| рдЕрдиреБрд╡рд╛рдж рдХреА рдХрдореА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ | тЬЕ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдФрд░ рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐/рдЪреЗрддрд╛рд╡рдиреА | тЪая╕П рд░рдирдЯрд╛рдЗрдо рдлреЙрд▓рдмреИрдХ | тЪая╕П рд░рдирдЯрд╛рдЗрдо рдлреЙрд▓рдмреИрдХ |
| рд╕рдореГрджреНрдз рд╕рд╛рдордЧреНрд░реА (JSX/рдорд╛рд░реНрдХрдбрд╛рдЙрди/рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕) | тЬЕ рд╕реАрдзреЗ рд╕рдорд░реНрдерди | тЭМ рд╕рдореГрджреНрдз рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ | тЪая╕П рд╕реАрдорд┐рдд |
| рдПрдЖрдИ-рд╕рдВрдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рдж | тЬЕ рд╣рд╛рдБ, рдХрдИ рдПрдЖрдИ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ API рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ | тЭМ рдирд╣реАрдВ | тЭМ рдирд╣реАрдВ |
| рд╡рд┐рдЬрд╝реБрдЕрд▓ рдПрдбрд┐рдЯрд░ | тЬЕ рд╣рд╛рдБ, рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдЬрд╝реБрдЕрд▓ рдПрдбрд┐рдЯрд░ + рд╡реИрдХрд▓реНрдкрд┐рдХ CMS; рдХреЛрдбрдмреЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ; рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп | тЭМ рдирд╣реАрдВ / рдмрд╛рд╣рд░реА рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз | тЭМ рдирд╣реАрдВ / рдмрд╛рд╣рд░реА рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз |
| рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд░реВрдЯрд┐рдВрдЧ | тЬЕ рд╣рд╛рдБ, рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдкрдереЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (Next.js рдФрд░ Vite рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ) | тЬЕ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд, рдРрдк рд░рд╛рдЙрдЯрд░ [locale] рд╕реЗрдЧрдореЗрдВрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ | тЬЕ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд |
| рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдЯ рдЬрдирд░реЗрд╢рди | тЬЕ рд╣рд╛рдБ | тЬЕ рд╣рд╛рдБ | тЬЕ рд╣рд╛рдБ |
| рдмрд╣реБрд╡рдЪрди | тЬЕ рдПрдиреЗрдорд░реЗрд╢рди-рдЖрдзрд╛рд░рд┐рдд рдкреИрдЯрд░реНрди | тЬЕ рдЕрдЪреНрдЫрд╛ | тЬЕ рдЕрдЪреНрдЫрд╛ |
| рд╕реНрд╡рд░реВрдкрдг (рддрд┐рдерд┐рдпрд╛рдБ, рд╕рдВрдЦреНрдпрд╛рдПрдБ, рдореБрджреНрд░рд╛рдПрдБ) | тЬЕ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕реНрд╡рд░реВрдкрдХ (рдЕрдВрджрд░ рд╕реЗ Intl) | тЬЕ рдЕрдЪреНрдЫрд╛ (Intl рд╕рд╣рд╛рдпрдХ) | тЬЕ рдЕрдЪреНрдЫрд╛ (Intl рд╕рд╣рд╛рдпрдХ) |
| рд╕рд╛рдордЧреНрд░реА рд╕реНрд╡рд░реВрдк | тЬЕ .tsx, .ts, .js, .json, .md, .txt, (.yaml WIP) | тЬЕ .json, .js, .ts | тЪая╕П .json |
| ICU рд╕рдорд░реНрдерди | тЪая╕П рдкреНрд░рдЧрддрд┐ рдкрд░ | тЬЕ рд╣рд╛рдБ | тЪая╕П рдкреНрд▓рдЧрдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (i18next-icu) |
| SEO рд╕рд╣рд╛рдпрдХ (hreflang, рд╕рд╛рдЗрдЯрдореИрдк) | тЬЕ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдЙрдкрдХрд░рдг: рд╕рд╛рдЗрдЯрдореИрдк, robots.txt, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ | тЬЕ рдЕрдЪреНрдЫрд╛ | тЬЕ рдЕрдЪреНрдЫрд╛ |
| рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо / рд╕рдореБрджрд╛рдп | тЪая╕П рдЫреЛрдЯрд╛ рд▓реЗрдХрд┐рди рддреЗрдЬреА рд╕реЗ рдмрдврд╝ рд░рд╣рд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ | тЬЕ рдордзреНрдпрдо рдЖрдХрд╛рд░, Next.js-рдХреЗрдВрджреНрд░рд┐рдд | тЬЕ рдордзреНрдпрдо рдЖрдХрд╛рд░, Next.js-рдХреЗрдВрджреНрд░рд┐рдд |
| рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдФрд░ рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ | тЬЕ рд╣рд╛рдБ, SSR / React рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд | тЪая╕П рдкреЗрдЬ рд╕реНрддрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рд▓реЗрдХрд┐рди рдЪрд╛рдЗрд▓реНрдб рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХрдВрдкреЛрдиреЗрдВрдЯ рдЯреНрд░реА рдореЗрдВ t-рдлрдВрдХреНрд╢рдВрд╕ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ | тЪая╕П рдкреЗрдЬ рд╕реНрддрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рд▓реЗрдХрд┐рди рдЪрд╛рдЗрд▓реНрдб рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХрдВрдкреЛрдиреЗрдВрдЯ рдЯреНрд░реА рдореЗрдВ t-рдлрдВрдХреНрд╢рдВрд╕ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ |
| рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ (рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХрдВрдЯреЗрдВрдЯ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛) | тЬЕ рд╣рд╛рдБ, Babel/SWC рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдкреНрд░рддрд┐-рдХрдВрдкреЛрдиреЗрдВрдЯ | тЪая╕П рдЖрдВрд╢рд┐рдХ | тЪая╕П рдЖрдВрд╢рд┐рдХ |
| рд▓реЗрдЬрд╝реА рд▓реЛрдбрд┐рдВрдЧ | тЬЕ рд╣рд╛рдБ, рдкреНрд░рддрд┐-рд▓реЛрдХрд▓ / рдкреНрд░рддрд┐-рдбрд┐рдХреНрд╢рдирд░реА | тЬЕ рд╣рд╛рдБ (рдкреНрд░рддрд┐-рд░реВрдЯ/рдкреНрд░рддрд┐-рд▓реЛрдХрд▓), рдиреЗрдорд╕реНрдкреЗрд╕ рдкреНрд░рдмрдВрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ | тЬЕ рд╣рд╛рдБ (рдкреНрд░рддрд┐-рд░реВрдЯ/рдкреНрд░рддрд┐-рд▓реЛрдХрд▓), рдиреЗрдорд╕реНрдкреЗрд╕ рдкреНрд░рдмрдВрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ |
| рдЕрдкреНрд░рдпреБрдХреНрдд рдХрдВрдЯреЗрдВрдЯ рдХреЛ рд╣рдЯрд╛рдирд╛ | тЬЕ рд╣рд╛рдБ, рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдкреНрд░рддрд┐-рдбрд┐рдХреНрд╢рдирд░реА | тЭМ рдирд╣реАрдВ, рдиреЗрдорд╕реНрдкреЗрд╕ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рд╛рде рдореИрдиреНрдпреБрдЕрд▓реА рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ | тЭМ рдирд╣реАрдВ, рдиреЗрдорд╕реНрдкреЗрд╕ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рд╛рде рдореИрдиреНрдпреБрдЕрд▓реА рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ |
| рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдкреНрд░рдмрдВрдзрди | тЬЕ рдореЙрдбреНрдпреВрд▓рд░ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдбрд┐рдЬрд╝рд╛рдЗрди-рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд | тЬЕ рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓рд░ | тЬЕ рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓рд░ |
рдкрд░рд┐рдЪрдп
Next.js рдЖрдкрдХреЛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХреГрдд routing (рдЬреИрд╕реЗ locale segments) рдХреЗ рд▓рд┐рдП built-in support рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ feature рдЕрдкрдиреЗ рдЖрдк translations рдирд╣реАрдВ рдХрд░рддрд╛ред рдЖрдкрдХреЛ рдЕрдкрдиреЗ users рдХреЛ localized content render рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ library рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдХрдИ i18n libraries рдореМрдЬреВрдж рд╣реИрдВ, рд▓реЗрдХрд┐рди Next.js рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЖрдЬ, рддреАрди рдХреЛ рдзреНрдпрд╛рди рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ: next-i18next, next-intl, рдФрд░ Intlayerред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА
- next-intl / next-i18next: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрдВрджреНрд░реАрдХреГрдд рдХреИрдЯрд▓реЙрдЧ рдкреНрд░рддрд┐ locale (рд╕рд╛рде рд╣реА i18next рдореЗрдВ namespaces)ред рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдмрдврд╝рддреЗ coupling рдФрд░ key churn рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реА рд╕рд╛рдЭрд╛ рд╕рддрд╣ рдмрди рдЬрд╛рддрд╛ рд╣реИред
- Intlayer: per-component (рдпрд╛ per-feature) dictionaries рдХреЛ co-located рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╡реЗ рд╕реЗрд╡рд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, UI pieces рдХреЗ duplication/migration рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ cross-team conflicts рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдЕрдкреНрд░рдпреБрдХреНрдд content рдХреЛ рдЦреЛрдЬрдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рд╣реИред
рдпрд╣ рдХреНрдпреЛрдВ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ: рдмрдбрд╝реЗ codebases рдпрд╛ design-system setups рдореЗрдВ, modular content monolithic catalogs рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╕реНрдХреЗрд▓ рдХрд░рддрд╛ рд╣реИред
Bundle рдЖрдХрд╛рд░ рдФрд░ dependencies
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, bundle рд╡рд╣ JavaScript рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреГрд╖реНрда рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдб рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП bundle рдХрд╛ рдЖрдХрд╛рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдмрд╣реБ-рднрд╛рд╖рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ bundle рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджреЛ рдШрдЯрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ:
- рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдб
- рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХрд╛ рдорд╣рддреНрд╡ рдиреНрдпреВрдирддрдо рд╣реИред рддреАрдиреЛрдВ рд╕рдорд╛рдзрд╛рди tree-shakable рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдб рдХреЗ рдЕрдкреНрд░рдпреБрдХреНрдд рд╣рд┐рд╕реНрд╕реЗ bundle рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рддреАрдиреЛрдВ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдорд▓реНрдЯреА-рд▓реИрдВрдЧреНрд╡реЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдП рдЧрдП JavaScript bundle size рдХреА рддреБрд▓рдирд╛ рджреА рдЧрдИ рд╣реИред
рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣рдореЗрдВ рдХрд┐рд╕реА formatter рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ tree-shaking рдХреЗ рдмрд╛рдж рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕реВрдЪреА рд╣реЛрдЧреА:
- next-intlayer:
useIntlayer,useLocale,NextIntlClientProvider, (Bundle size 180.6 kB -> 15.24 kB (gzip)) - next-intl:
useTranslations,useLocale,NextIntlClientProvider, (Bundle size 101.3 kB -> 31.4 kB (gzip)) - next-i18next:
useTranslation,useI18n,I18nextProvider, (Bundle size 80.7 kB -> 25.5 kB (gzip))
рдпреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ React context/state рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ wrappers рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП bundle size рдкрд░ i18n library рдХрд╛ рдХреБрд▓ рдкреНрд░рднрд╛рд╡ рдиреНрдпреВрдирддрдо рд╣реИред
рд╕рд╛рдордЧреНрд░реА рдФрд░ рдЕрдиреБрд╡рд╛рдж
рдпрд╣ рднрд╛рдЧ рдЕрдХреНрд╕рд░ developers рджреНрд╡рд╛рд░рд╛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдП 10 рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ 10 рдкреГрд╖реНрдареЛрдВ рд╕реЗ рдмрдиреЗ рдПрдХ application рдХреЗ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдЧрдгрдирд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 100% рдЕрджреНрд╡рд┐рддреАрдп рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рд╕реА рд╕рд╛рдордЧреНрд░реА redundant рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ page title, header, footer, рдЖрджрд┐)ред
рдПрдХ user рдЬреЛ /fr/about рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рджрд┐рдП рдЧрдП language рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА load рдХрд░реЗрдЧрд╛ред рд╕рд╛рдордЧреНрд░реА optimization рдХреЛ ignore рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ 8,200% ((1 + (((10 pages - 1) ├Ч (10 languages - 1)))) ├Ч 100) application рд╕рд╛рдордЧреНрд░реА рдХреЛ unnecessarily load рдХрд░рдирд╛ред рдХреНрдпрд╛ рдЖрдк рд╕рдорд╕реНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ? рднрд▓реЗ рд╣реА рдпрд╣ рд╕рд╛рдордЧреНрд░реА text рд░рд╣реЗ, рдФрд░ рдЬрдмрдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдЕрдкрдиреА site рдХреА images рдХреЛ optimize рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ useless рд╕рд╛рдордЧреНрд░реА рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ рдФрд░ users рдХреЗ computers рдХреЛ рдЗрд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рдХреЗ рд▓рд┐рдП process рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛рдПрдВ:
Route рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд╛рдЬрди:
рдпрджрд┐ рдореИрдВ
/aboutрдкреГрд╖реНрда рдкрд░ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ/homeрдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА load рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПLocale рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд╛рдЬрди:
рдпрджрд┐ рдореИрдВ
/fr/aboutрдкреГрд╖реНрда рдкрд░ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ/en/aboutрдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА load рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП
рдлрд┐рд░ рд╕реЗ, рддреАрдиреЛрдВ solutions рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдЗрди optimizations рдХреЛ manage рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рддреАрдиреЛрдВ solutions рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ DX (Developer Experience) рдореЗрдВ рд╣реИред
next-intl рдФрд░ next-i18next translations рдХреЛ manage рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ centralized approach рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ locale рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдФрд░ sub-files рдХреЗ рдЖрдзрд╛рд░ рдкрд░ JSON рдХреЛ split рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред next-i18next рдореЗрдВ, рд╣рдо JSON files рдХреЛ 'namespaces' рдХрд╣рддреЗ рд╣реИрдВ; next-intl messages рдХреЛ declare рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред intlayer рдореЗрдВ, рд╣рдо JSON files рдХреЛ 'dictionaries' рдХрд╣рддреЗ рд╣реИрдВред
next-intlрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ,next-i18nextрдХреА рддрд░рд╣, content рдХреЛ page/layout level рдкрд░ load рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕ content рдХреЛ рдПрдХ context provider рдореЗрдВ load рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ developer рдХреЛ manually JSON files рдХреЛ manage рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП load рд╣реЛрдВрдЧреАред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ developers рдЕрдХреНрд╕рд░ рдЗрд╕ optimization рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП page рдХреЗ context provider рдореЗрдВ рд╕рднреА content рдХреЛ load рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред
intlayerрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рднреА content рдХреЛ application рдореЗрдВ load рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдПрдХ plugin (@intlayer/babel/@intlayer/swc) bundle рдХреЛ optimize рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдкреГрд╖реНрда рдкрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА content рдХреЛ load рдХрд░рдХреЗред рдЗрд╕рд▓рд┐рдП developer рдХреЛ manually dictionaries рдХреЛ manage рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдЬреЛ load рд╣реЛрдВрдЧреАред рдпрд╣ рдмреЗрд╣рддрд░ optimization, рдмреЗрд╣рддрд░ maintainability, рдФрд░ development time рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЬреИрд╕реЗ-рдЬреИрд╕реЗ application рдмрдврд╝рддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм multiple developers application рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ), рдпрд╣ common рд╣реИ рдХрд┐ JSON files рд╕реЗ рдРрд╕реА рд╕рд╛рдордЧреНрд░реА рдХреЛ remove рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдПрдВ рдЬреЛ рдЕрдм рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рднреА JSON рд╕рднреА cases рдореЗрдВ load рд╣реЛрддреЗ рд╣реИрдВ (next-intl, next-i18next, intlayer)ред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ Intlayer рдХрд╛ approach рдЕрдзрд┐рдХ performant рд╣реИ: рдпрджрд┐ рдПрдХ component рдЕрдм рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА dictionary bundle рдореЗрдВ load рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдХреИрд╕реЗ library fallbacks рдХреЛ handle рдХрд░рддреА рд╣реИ рдпрд╣ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЖрдЗрдП рдорд╛рди рд▓реЗрдВ рдХрд┐ application default рд░реВрдк рд╕реЗ English рдореЗрдВ рд╣реИ, рдФрд░ user /fr/about рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ French рдореЗрдВ translations missing рд╣реИрдВ, рддреЛ рд╣рдо English fallback рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
next-intl рдФрд░ next-i18next рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, library рдХреЛ current locale рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд JSON рдХреЛ load рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди fallback locale рд╕реЗ рднреАред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╕рднреА content рдХрд╛ translation рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда 100% unnecessary рд╕рд╛рдордЧреНрд░реА рдХреЛ load рдХрд░реЗрдЧрд╛ред рддреБрд▓рдирд╛ рдореЗрдВ, intlayer dictionary build time рдкрд░ fallback рдХреЛ process рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЛ load рдХрд░реЗрдЧрд╛ред
рдзреНрдпрд╛рди рджреЗрдВ:intlayerрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ bundle рдХреЛ optimize рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреАintlayer.config.tsfile рдореЗрдВimportMode: 'dynamic'option рдХреЛ set рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ plugin@intlayer/babel/@intlayer/swcinstalled рд╣реИрдВ (default рд░реВрдк рд╕реЗvite-intlayerрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ installed)ред
рдпрд╣рд╛рдВ рдПрдХ vite + react application рдореЗрдВ intlayer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ bundle size optimization рдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рд╕рднреА рдбреЗрдЯрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдореЛрдбрд▓ рдореЗрдВ рдЦреЛрд▓реЗрдВ
| Optimized bundle | Bundle not optimized |
|---|---|
![]() | ![]() |
TypeScript рдФрд░ рд╕реБрд░рдХреНрд╖рд╛
next-i18next
- Hooks рдХреЗ рд▓рд┐рдП рдмреЗрд╕ typingsред strict key typing рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд tooling/config рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
next-intl
- рдареЛрд╕ TypeScript support, рд▓реЗрдХрд┐рди keys рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ strictly typed рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рд╕реБрд░рдХреНрд╖рд╛ patterns рдХреЛ manually maintain рдХрд░реЗрдВрдЧреЗред
intlayer
- рдЖрдкрдХреА content рд╕реЗ strict types generate рдХрд░рддрд╛ рд╣реИред IDE autocompletion рдФрд░ compile-time errors deploy рд╕реЗ рдкрд╣рд▓реЗ typos рдФрд░ missing keys рдХреЛ catch рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: Strong typing failures рдХреЛ left (CI/build) рдХреА рдУрд░ shift рдХрд░рддрд╛ рд╣реИ right (runtime) рдХреА рдмрдЬрд╛рдпред
рдЕрдиреБрдкрд▓рдмреНрдз рдЕрдиреБрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ
next-i18next
- runtime fallbacks рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред Build рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ред
next-intl
- runtime fallbacks рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред Build рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ред
intlayer
- Build-time detection with warnings/errors for missing locales or keysред
Why it matters: Build рдХреЗ рджреМрд░рд╛рди gaps рдХреЛ рдкрдХрдбрд╝рдирд╛ production рдореЗрдВ 'undefined' strings рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред
рд░рд╛рдЙрдЯрд┐рдВрдЧ, рдорд┐рдбрд▓рд╡реЗрдпрд░ рдФрд░ рдпреВрдЖрд░рдПрд▓ рд░рдгрдиреАрддрд┐
next-i18next
- рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдорд┐рдбрд▓рд╡реЗрдпрд░ рдмрд┐рд▓реНрдЯ-рдЗрди рдирд╣реАрдВ рд╣реИред
next-intl
- рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- рдорд┐рдбрд▓рд╡реЗрдпрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
intlayer
- рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- рдорд┐рдбрд▓рд╡реЗрдпрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдХреНрдпреЛрдВ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ: SEO рдФрд░ рдЦреЛрдЬ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
Server Components (RSC) рд╕рдВрд░реЗрдЦрдг
next-i18next
- рдкреГрд╖реНрда рдФрд░ рд▓реЗрдЖрдЙрдЯ server components рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
- рдмрд╛рд▓ server components рдХреЗ рд▓рд┐рдП synchronous API рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
next-intl
- рдкреГрд╖реНрда рдФрд░ рд▓реЗрдЖрдЙрдЯ server components рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
- рдмрд╛рд▓ server components рдХреЗ рд▓рд┐рдП synchronous API рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
intlayer
- рдкреГрд╖реНрда рдФрд░ рд▓реЗрдЖрдЙрдЯ server components рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
- рдмрд╛рд▓ server components рдХреЗ рд▓рд┐рдП synchronous API рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: Server component рд╕рдкреЛрд░реНрдЯ Next.js 13+ рдХреА рдПрдХ рдореБрдЦреНрдп рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рдЬреЛ performance рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреА рд╣реИред parent рд╕реЗ рдмрд╛рд▓ server components рдореЗрдВ locale рдпрд╛ t рдлрд╝рдВрдХреНрд╢рди рдХреЛ props рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЗ components рдХрдо reusable рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо (TMS) рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг
рдмрдбрд╝реА рд╕рдВрдЧрдардиреЗрдВ рдЕрдХреНрд╕рд░ Crowdin, Phrase, Lokalise, Localizely, рдпрд╛ Localazy рдЬреИрд╕реА Translation Management Systems (TMS) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВред
рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЛ рдХреНрдпреЛрдВ рдкрд░рд╡рд╛рд╣ рд╣реИ
- рд╕рд╣рдпреЛрдЧ рдФрд░ рднреВрдорд┐рдХрд╛рдПрдБ: рдХрдИ actors рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: developers, product managers, translators, reviewers, marketing teamsред
- рд╕реНрдХреЗрд▓ рдФрд░ рджрдХреНрд╖рддрд╛: continuous localization, in-context reviewред
next-intl / next-i18next
- рдЖрдорддреМрд░ рдкрд░ centralized JSON catalogs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП TMS рдХреЗ рд╕рд╛рде export/import рд╕реАрдзрд╛ рд╣реИред
- рдкрд░рд┐рдкрдХреНрд╡ ecosystems рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП examples/integrationsред
Intlayer
- decentralized, per-component dictionaries рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ TypeScript/TSX/JS/JSON/MD content рдХреЛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
- рдпрд╣ code рдореЗрдВ modularity рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдХреЛрдИ tool centralized, flat JSON files рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рддреЛ plug-and-play TMS integration рдХреЛ рдХрдард┐рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
- Intlayer рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: AI-assisted translations (рдЕрдкрдиреА provider keys рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рдПрдХ Visual Editor/CMS, рдФрд░ CLI/CI workflows рдХреЛ catch рдФрд░ prefill gaps рдХреЗ рд▓рд┐рдПред
рдиреЛрдЯ:next-intlрдФрд░i18nextTypeScript catalogs рдХреЛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреА team.tsfiles рдореЗрдВ messages рдХреЛ store рдХрд░рддреА рд╣реИ рдпрд╛ рдЙрдиреНрд╣реЗрдВ feature рджреНрд╡рд╛рд░рд╛ decentralize рдХрд░рддреА рд╣реИ, рддреЛ рдЖрдк рд╕рдорд╛рди TMS friction рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдИnext-intlsetupslocales/folder рдореЗрдВ centralized рд░рд╣рддреЗ рд╣реИрдВ, рдЬреЛ TMS рдХреЗ рд▓рд┐рдП JSON рдореЗрдВ refactor рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рд╣реИред
рдбреЗрд╡рд▓рдкрд░ рдЕрдиреБрднрд╡
рдпрд╣ рднрд╛рдЧ рддреАрдиреЛрдВ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЧрд╣рди рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ 'getting started' рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рд░рд▓ cases рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ use case рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ project рдХреЗ рдЕрдзрд┐рдХ рд╕рдорд╛рди рд╣реИред
рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд░рдЪрдирд╛
рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд░рдЪрдирд╛ рдЖрдкрдХреЗ codebase рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА maintainability рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рддреБрд▓рдирд╛
- next-intl / next-i18next: рдХреЗрдВрджреНрд░реАрдХреГрдд рдХреИрдЯрд▓реЙрдЧ (JSON; рдиреЗрдорд╕реНрдкреЗрд╕/рд╕рдВрджреЗрд╢)ред рд╕реНрдкрд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛, рдЕрдиреБрд╡рд╛рдж рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдРрдкреНрд╕ рдмрдврд╝рддреЗ рд╣реИрдВ, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдзрд┐рдХ рд╕рдВрдкрд╛рджрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
- Intlayer: рдкреНрд░рддрд┐-рдШрдЯрдХ
.content.{ts|js|json}рд╢рдмреНрджрдХреЛрд╢ рдЬреЛ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣-рд╕реНрдерд┐рдд рд╣реИрдВред рдЖрд╕рд╛рди рдШрдЯрдХ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдФрд░ рд╕реНрдерд╛рдиреАрдп рддрд░реНрдХ; рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдмрд┐рд▓реНрдб-рд╕рдордп рдЙрдкрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рд╕реЗрдЯрдЕрдк рдФрд░ рдХрдВрдЯреЗрдВрдЯ рд▓реЛрдбрд┐рдВрдЧ
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ JSON рдлрд╛рдЗрд▓ рдХреЛ рдХреИрд╕реЗ import рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЗрд╕реЗ optimize рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ library рдХрдВрдЯреЗрдВрдЯ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ handle рдХрд░рддреА рд╣реИред
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рддреБрд▓рдирд╛
рддреАрдиреЛрдВ per-locale content loading рдФрд░ providers рдХреЛ support рдХрд░рддреЗ рд╣реИрдВред
next-intl/next-i18next рдХреЗ рд╕рд╛рде, рдЖрдк рдЖрдорддреМрд░ рдкрд░ selected messages/namespaces рдХреЛ per route load рдХрд░рддреЗ рд╣реИрдВ рдФрд░ providers рдХреЛ рдЬрд╣рд╛рдБ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╡рд╣рд╛рдБ place рдХрд░рддреЗ рд╣реИрдВред
Intlayer рдХреЗ рд╕рд╛рде, build-time analysis рдХреЛ add рдХрд░рддрд╛ рд╣реИ usage рдХреЛ infer рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ manual wiring рдХреЛ reduce рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ single root provider рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред
Team preference рдХреЗ рдЖрдзрд╛рд░ рдкрд░ explicit control рдФрд░ automation рдХреЗ рдмреАрдЪ рдЪреБрдиреЗрдВред
рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ
рдЖрдЗрдП рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ рдЬреЛ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред
рдЕрдиреБрд╡рд╛рдж (рдПрдХ JSON рдкреНрд░рддрд┐ namespace src/locales/... рдХреЗ рддрд╣рдд)
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ (рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ namespace рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ)
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреЗрдЬ/рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ namespaces рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕реЗ
about)ред рдпрджрд┐ рдЖрдк React < 19 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рднрд╛рд░реА formatters рдЬреИрд╕реЗIntl.NumberFormatрдХреЛ memoize рдХрд░реЗрдВред
рдЕрдиреБрд╡рд╛рдж (рдЖрдХреГрддрд┐ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ; рдЙрдиреНрд╣реЗрдВ next-intl рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓реЛрдб рдХрд░реЗрдВ)
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдкреЗрдЬ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрджреЗрд╢ рдкрд░ "about" рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ
рд╕рд╛рдордЧреНрд░реА
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рддреБрд▓рдирд╛
рд╕рдВрдЦреНрдпрд╛ рд╕реНрд╡рд░реВрдкрдг
- next-i18next: рдХреЛрдИ
useNumberрдирд╣реАрдВ;Intl.NumberFormat(рдпрд╛ i18next-icu) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред - next-intl:
useFormatter().number(value)ред - Intlayer:
useNumber()built-inред
- next-i18next: рдХреЛрдИ
Keys
- рдПрдХ nested structure (
about.counter.label) рд░рдЦреЗрдВ рдФрд░ рдЕрдкрдиреЗ hook рдХреЛ accordingly scope рдХрд░реЗрдВ (useTranslation("about")+t("counter.label")рдпрд╛useTranslations("about.counter")+t("label"))ред
- рдПрдХ nested structure (
рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рди
- next-i18next рдХреЛ
public/locales/{lng}/{ns}.jsonрдореЗрдВ JSON рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИред - next-intl рд▓рдЪреАрд▓рд╛ рд╣реИ; рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрдкрдиреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓реЛрдб рдХрд░реЗрдВред
- Intlayer TS/JS dictionaries рдореЗрдВ content store рдХрд░рддрд╛ рд╣реИ рдФрд░ key рдХреЗ рдЖрдзрд╛рд░ рдкрд░ resolve рдХрд░рддрд╛ рд╣реИред
- next-i18next рдХреЛ
рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ
рд╣рдо рдПрдХ UI рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд▓реЗрдВрдЧреЗред рдпрд╣ рдХрдВрдкреЛрдиреЗрдВрдЯ рдПрдХ рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╣реИ, рдФрд░ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдЪрд╛рдЗрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (page (server component) -> client component -> server component)ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдЪрд╛рдЗрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ async рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдЬреИрд╕рд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ async рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ translations рдФрд░ formatter рдлрд╝рдВрдХреНрд╢рди рдХреЛ props рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдкрдХреЗ page / layout рдореЗрдВ:
import { getTranslations, getFormatter } from "next-intl/server";const t = await getTranslations("about.counter");const formatter = await getFormatter().then((formatter) => formatter.number());
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
Intlayernext-intlayer/serverрдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ server-safe hooks рдХреЛ expose рдХрд░рддрд╛ рд╣реИред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,useIntlayerрдФрд░useNumberhooks-like syntax рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ hooks рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди server context (IntlayerServerProvider) рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред
рдореЗрдЯрд╛рдбреЗрдЯрд╛ / рд╕рд╛рдЗрдЯрдореИрдк / рд░реЛрдмреЛрдЯреНрд╕
content рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ internationalization рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдЖрдкрдХреА website рдХреЛ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рджреГрд╢реНрдпрдорд╛рди рдмрдирд╛рдирд╛ рд╣реИред I18n рдЖрдкрдХреА website visibility рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрднреБрдд рд╕рд╛рдзрди рд╣реИред
рдпрд╣рд╛рдБ рдмрд╣реБрднрд╛рд╖реА SEO рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдЪреНрдЫреА practices рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИред
<head>tag рдореЗрдВ hreflang рдореЗрдЯрд╛ tags рд╕реЗрдЯ рдХрд░реЗрдВ > рдпрд╣ search engines рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдкрд░ рдХреМрди рд╕реА рднрд╛рд╖рд╛рдПрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВhttp://www.w3.org/1999/xhtmlXML schema рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ sitemap.xml рдореЗрдВ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЕрдиреБрд╡рд╛рдж рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ >- robots.txt рд╕реЗ prefixed pages рдХреЛ exclude рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ (рдЙрджрд╛.
/dashboard,/fr/dashboard,/es/dashboard) > - рд╕рдмрд╕реЗ localized page рдкрд░ redirect рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП custom Link component рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЙрджрд╛. рдлреНрд░реЗрдВрдЪ рдореЗрдВ
<a href="/fr/about">A propos</a>) >
Developers рдЕрдХреНрд╕рд░ locales рдХреЗ across рдЕрдкрдиреЗ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдареАрдХ рд╕реЗ reference рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
Intlayer рдЖрдкрдХреЗ sitemap рдХреЗ рд▓рд┐рдП рдмрд╣реБрднрд╛рд╖реА URLs рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ getMultilingualUrls function рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд▓реЛрдХреЗрд▓ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП Middleware
рд▓реЛрдХреЗрд▓ рдбрд┐рдЯреЗрдХреНрд╢рди рдФрд░ рд░реВрдЯрд┐рдВрдЧ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ middleware рдЬреЛрдбрд╝реЗрдВ:
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рд▓реЛрдХреЗрд▓ рдбрд┐рдЯреЗрдХреНрд╢рди рдФрд░ рд░реВрдЯрд┐рдВрдЧ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ middleware рдЬреЛрдбрд╝реЗрдВ:
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
Intlayer next-intlayer package рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ built-in middleware рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
Middleware рдХреА рд╕реЗрдЯрдЕрдк intlayer.config.ts рдлрд╛рдЗрд▓ рдореЗрдВ рдХреЗрдВрджреНрд░реАрдХреГрдд рд╣реИред
рд╕реЗрдЯрдЕрдк рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдВ
- рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐
langрдФрд░dirрдХреЛsrc/app/[locale]/layout.tsxрдореЗрдВ рд░реВрдЯ<html>рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред - рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
common.json,about.json)src/locales/<locale>/рдХреЗ рдЕрдВрддрд░реНрдЧрддред - рдХреНрд▓рд╛рдЗрдВрдЯ рдШрдЯрдХреЛрдВ рдореЗрдВ
useTranslation('<ns>')рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░I18nProviderрдХреЛ рд╕рдорд╛рди рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рд╕рд╛рде рд╕реНрдХреЛрдк рдХрд░рдХреЗ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рд▓реЛрдб рдХрд░реЗрдВред - рдкреЗрдЬреЛрдВ рдХреЛ рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ рд╕реНрдЯреИрдЯрд┐рдХ рд░рдЦреЗрдВ: рдкреЗрдЬреЛрдВ рдкрд░
export const dynamic = 'force-static'рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ;dynamicParams = falseрд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░generateStaticParamsрдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред - рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реАрдорд╛рдУрдВ рдХреЗ рддрд╣рдд рдиреЗрд╕реНрдЯреЗрдб рд╕рд┐рдВрдХ рд╕рд░реНрд╡рд░ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдпрд╛
tрдлрд╝рдВрдХреНрд╢рди рдФрд░localeрдХреЛ рдкрд╛рд╕ рдХрд░рдХреЗред - SEO рдХреЗ рд▓рд┐рдП, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ
alternates.languagesрд╕реЗрдЯ рдХрд░реЗрдВ,sitemap.tsрдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд URLs рдХреА рд╕реВрдЪреА рдмрдирд╛рдПрдВ, рдФрд░robots.tsрдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рди рджреЗрдВред - рд▓реЛрдХреЗрд▓-рдЬрд╛рдЧрд░реВрдХ рдлреЙрд░реНрдореЗрдЯрд░реНрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Intl.NumberFormat(locale)) рдХреЛ рд╡рд░реАрдпрддрд╛ рджреЗрдВ рдФрд░ рдпрджрд┐ React < 19 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдореЗрдореЛрдЗрдЬрд╝ рдХрд░реЗрдВред
- HTML
langрдФрд░dirрд╕реЗрдЯ рдХрд░реЗрдВ:src/app/[locale]/layout.tsxрдореЗрдВ,getLocaleDirection(locale)рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗdirрдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░<html lang={locale} dir={dir}>рд╕реЗрдЯ рдХрд░реЗрдВред - рдиреЗрдорд╕реНрдкреЗрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ: рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдФрд░ рдиреЗрдорд╕реНрдкреЗрд╕ JSON рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
common.json,about.json)ред - рдХреНрд▓рд╛рдЗрдВрдЯ рдкреЗрд▓реЛрдб рдХреЛ рдХрдо рдХрд░реЗрдВ: рдкреЗрдЬреЛрдВ рдкрд░, рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ
NextIntlClientProviderрдХреЛ рднреЗрдЬреЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,pick(messages, ['common', 'about']))ред - рд╕реНрдЯреИрдЯрд┐рдХ рдкреЗрдЬреЛрдВ рдХреЛ рд╡рд░реАрдпрддрд╛ рджреЗрдВ:
export const dynamic = 'force-static'рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рд╕рднреАlocalesрдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдЯрд┐рдХ params рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВред - рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рд░реНрд╡рд░ рдШрдЯрдХ: рдкреВрд░реНрд╡-рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (рдЕрдиреБрд╡рд╛рджрд┐рдд рд▓реЗрдмрд▓, рд╕реНрд╡рд░реВрдкрд┐рдд рд╕рдВрдЦреНрдпрд╛рдПрдВ) рдХреЛ рдкрд╛рд╕ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рдШрдЯрдХреЛрдВ рдХреЛ рд╕рд┐рдВрдХ рд░рдЦреЗрдВ рди рдХрд┐ async рдХреЙрд▓ рдпрд╛ рдЧреИрд░-рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рдиред
- рдореЙрдбреНрдпреВрд▓рд░ рд╕рд╛рдордЧреНрд░реА:
.content.{ts|js|json}рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдордЧреНрд░реА рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣-рд╕реНрдерд┐рдд рдХрд░реЗрдВред - рдкреНрд░рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд╛: рдХрдВрдкрд╛рдЗрд▓-рд╕рдордп рд╕рд╛рдордЧреНрд░реА рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП TypeScript рдПрдХреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рдмрд┐рд▓реНрдб-рд╕рдордп рдЕрдиреБрдХреВрд▓рди: рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ рдФрд░ рдмрдВрдбрд▓ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП Intlayer рдХреЗ рдмрд┐рд▓реНрдб рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рдПрдХреАрдХреГрдд рдЯреВрд▓рд┐рдВрдЧ: рдмрд┐рд▓реНрдЯ-рдЗрди рд░реВрдЯрд┐рдВрдЧ, SEO рд╕рд╣рд╛рдпрдХреЛрдВ рдФрд░ рд╡рд┐рдЬреБрдЕрд▓ рдПрдбрд┐рдЯрд░ рд╕рдорд░реНрдерди рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВред
рдФрд░ рд╡рд┐рдЬреЗрддрд╛ рд╣реИтАж
рдпрд╣ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЕрдкрдиреЗ trade-offs рд╣реИрдВред рдпрд╣рд╛рдБ рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ:
next-i18next
- рдкрд░рд┐рдкрдХреНрд╡, рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рднрд░рдкреВрд░, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрдореНрдпреБрдирд┐рдЯреА рдкреНрд▓рдЧрдЗрди, рд▓реЗрдХрд┐рди рдЙрдЪреНрдЪ рд╕реЗрдЯрдЕрдк рд▓рд╛рдЧрддред рдпрджрд┐ рдЖрдкрдХреЛ i18next рдХреЗ рдкреНрд▓рдЧрдЗрди рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд▓рдЧрдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдиреНрдирдд ICU рдирд┐рдпрдо) рдФрд░ рдЖрдкрдХреА рдЯреАрдо рдкрд╣рд▓реЗ рд╕реЗ i18next рдХреЛ рдЬрд╛рдирддреА рд╣реИ, рддреЛ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред
next-intl
- рд╕рдмрд╕реЗ рд╕рд░рд▓, рд╣рд▓реНрдХрд╛-рдлреБрд▓реНрдХрд╛, рдХрдо рдирд┐рд░реНрдгрдп рдЖрдк рдкрд░ рдереЛрдкреЗ рдЧрдПред рдпрджрд┐ рдЖрдк рдПрдХ рдиреНрдпреВрдирддрдо рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреЗрдВрджреНрд░реАрднреВрдд рдХреИрдЯрд▓реЙрдЧ рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рд╣реИрдВ, рдФрд░ рдЖрдкрдХрд╛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдЫреЛрдЯрд╛ рд╕реЗ рдордзреНрдпрдо рдЖрдХрд╛рд░ рдХрд╛ рд╣реИред
Intlayer
- рдЖрдзреБрдирд┐рдХ Next.js рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд┐рдд, рдореЙрдбреНрдпреВрд▓рд░ рдХрдВрдЯреЗрдВрдЯ, type safety, tooling, рдФрд░ рдХрдо boilerplate рдХреЗ рд╕рд╛рдеред рдпрджрд┐ рдЖрдк component-scoped content, strict TypeScript, build-time guarantees, tree-shaking, рдФрд░ batteries-included routing/SEO/editor tooling рдХреЛ рдорд╣рддреНрд╡ рджреЗрддреЗ рд╣реИрдВ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Next.js App Router, design-systems рдФрд░ рдмрдбрд╝реЗ, рдореЙрдбреНрдпреВрд▓рд░ codebases рдХреЗ рд▓рд┐рдПред
рдпрджрд┐ рдЖрдк рдиреНрдпреВрдирддрдо рд╕реЗрдЯрдЕрдк рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдореИрдиреБрдЕрд▓ wiring рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ next-intl рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рдХреЛрдИ рдмреБрд░рд╛рдИ рдирд╣реАрдВ рд╣реИ, рддреЛ next-i18next рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдХ рдЖрдзреБрдирд┐рдХ, рд╕реНрдХреЗрд▓реЗрдмрд▓, рдореЙрдбреНрдпреВрд▓рд░ рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрдорд┐рдд tools рд╣реИрдВ, рддреЛ Intlayer рдЗрд╕реЗ рдЖрдкрдХреЛ рд╕реАрдзреЗ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦрддрд╛ рд╣реИред
рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк: рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ well-proven рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ Crowdin, Phrase, рдпрд╛ рдЕрдиреНрдп рдкреЗрд╢реЗрд╡рд░ translation management systems рдЬреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд localization platforms рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрдкрдиреЗ mature ecosystem рдФрд░ proven integrations рдХреЗ рд▓рд┐рдП next-intl рдпрд╛ next-i18next рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
Future roadmap: Intlayer i18next рдФрд░ next-intl рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдКрдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ plugins рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ automation, syntax, рдФрд░ content management рдХреЗ рд▓рд┐рдП Intlayer рдХреЗ рдлрд╛рдпрджреЗ рджреЗрдЧрд╛ рдЬрдмрдХрд┐ рдЖрдкрдХреЗ application code рдореЗрдВ рдЗрди рд╕реНрдерд╛рдкрд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ security рдФрд░ stability рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдЧрд╛ред
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдиреЛрдЯреНрд╕ (next-intl / next-i18next тЖТ Intlayer)
- рдкреНрд░рддреНрдпреЗрдХ рдлреАрдЪрд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ: рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рд░реВрдЯ рдпрд╛ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
- рдкреБрд░рд╛рдиреЗ рдХреИрдЯрд▓реЙрдЧреНрд╕ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рд░рдЦреЗрдВ: рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдкреБрд▓ рдХрд╛ рдХрд╛рдо рдХрд░реЗрдВ; рдПрдХ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред
- рд╕рдЦреНрдд рдЬрд╛рдВрдЪреЗрдВ рдЪрд╛рд▓реВ рдХрд░реЗрдВ: рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдкрд░ рдЕрдВрддрд░рд╛рд▓ рдЬрд▓реНрджреА рдкрддрд╛ рдЪрд▓рдиреЗ рджреЗрдВред
- рдорд┐рдбрд▓рд╡реЗрдпрд░ рдФрд░ рд╣реЗрд▓реНрдкрд░реНрд╕ рдЕрдкрдирд╛рдПрдВ: рд╕рд╛рдЗрдЯ-рд╡рд╛рдЗрдб рд▓реЛрдХрд▓ рдбрд┐рдЯреЗрдХреНрд╢рди рдФрд░ SEO рдЯреИрдЧреНрд╕ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░реЗрдВред
- рдмрдВрдбрд▓реНрд╕ рдХреЛ рдорд╛рдкреЗрдВ: рдЬрдм рдЕрдкреНрд░рдпреБрдХреНрдд рд╕рд╛рдордЧреНрд░реА рд╣рдЯрд╛рдИ рдЬрд╛рддреА рд╣реИ рддреЛ рдмрдВрдбрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рдХрдореА рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рддреАрдиреЛрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдореВрд▓ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдореЗрдВ рд╕рдлрд▓ рд╣реИрдВред рдлрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рддрдирд╛ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдПрдХ рдордЬрдмреВрдд, рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╕реЗрдЯрдЕрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзреБрдирд┐рдХ Next.js рдореЗрдВ:
- Intlayer рдХреЗ рд╕рд╛рде, рдореЙрдбреНрдпреВрд▓рд░ рдХрдВрдЯреЗрдВрдЯ, рд╕рдЦреНрдд TS, рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рд╕реБрд░рдХреНрд╖рд╛, рдЯреНрд░реА-рд╢реЗрдХреНрдб рдмрдВрдбрд▓, рдФрд░ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХрд╛ App Router + SEO рдЯреВрд▓рд┐рдВрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрдВ, рди рдХрд┐ рдмреЛрдЭред
- рдпрджрд┐ рдЖрдкрдХреА рдЯреАрдо рдПрдХ рдорд▓реНрдЯреА-рд▓реЛрдХрд▓, рдХрдВрдкреЛрдиреЗрдВрдЯ-рдЪрд╛рд▓рд┐рдд рдРрдк рдореЗрдВ рд░рдЦрд░рдЦрд╛рд╡ рдФрд░ рдЧрддрд┐ рдХреЛ рдорд╣рддреНрд╡ рджреЗрддреА рд╣реИ, рддреЛ Intlayer рдЖрдЬ рд╕рдмрд╕реЗ рдкреВрд░реНрдг рдЕрдиреБрднрд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП 'Why Intlayer?' рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
рдЕрднреА рддрдХ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВред рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдмрдиреЗрдВред


