рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдХреЛ рдкреВрдЫреЗрдВ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕ рдкреГрд╖реНрда рдФрд░ рдЖрдкрдХреЗ рдЪреБрдиреЗ рд╣реБрдП AI рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рд╕рдВрд╕реНрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕
- "рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг"v9.5.1026/9/2026
рдЗрд╕ рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рдПрдХ AI рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХреА рдЧрдИ рд╣реИред
рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдореВрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦреЗрдВрдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ GitHub рдкрд░ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдХреЗ рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП GitHub рд▓рд┐рдВрдХрджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ Markdown рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
2026 рдореЗрдВ Lingui рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ Next.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХреИрд╕реЗ рдХрд░реЗрдВ
рд╡рд┐рд╖рдп рд╕реВрдЪреА
Lingui рдХреНрдпрд╛ рд╣реИ?
Lingui рдПрдХ i18n рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ macros рдФрд░ message extraction рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдЖрдк рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ (components) рдореЗрдВ рд╕реНрд░реЛрдд рдЯреЗрдХреНрд╕реНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ ( t`Hello` , <Trans>Hello</Trans>), lingui extract рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЛ рдХреИрдЯрд▓реЙрдЧ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ PO рдлрд╝рд╛рдЗрд▓реЗрдВ) рдореЗрдВ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд▓реЛрдбрд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрдореНрдкреИрдХреНрдЯ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд (compile) рдХрд░рддрд╛ рд╣реИред рд╕рдВрджреЗрд╢ ICU MessageFormat рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ Lingui App Router рдореЗрдВ React Server Components рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдЧрд╛рдЗрдб рдПрдХ Next.js 16 App Router рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Lingui рдХреЛ рд╕реЗрдЯ рдЕрдк рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- SWC рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд Macros, рддрд╛рдХрд┐ Turbopack рдЕрдкрдиреА рдЧрддрд┐ рдмрдирд╛рдП рд░рдЦреЗред
- Server рдФрд░ Client Components рдЬреЛ рд╕рдорд╛рди
TransрдФрд░useLinguiAPI рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред proxy.tsрдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Locale routing: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП/about, рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП/fr/about, рдФрд░ рдкрд╣рд▓реА рдмрд╛рд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдкрд╣рдЪрд╛рдиредgenerateStaticParamsрдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдХреЗрд▓ рдХрд╛ Static renderingред- рдкреВрд░реНрдг рдмрд╣реБрднрд╛рд╖реА SEO: рдЕрдиреБрд╡рд╛рджрд┐рдд
generateMetadata, canonical,x-defaultрдХреЗ рд╕рд╛рдеhreflang, Open Graph locales, JSON-LD,sitemap.ts,robots.tsрдФрд░ рд╕реНрдерд╛рдиреАрдпрдХреГрдд (localized) 404 рдкреЗрдЬред
рдХрд┐рд╕реА рдЕрдиреНрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рддрд▓рд╛рд╢ рд╣реИ? next-intl рдЧрд╛рдЗрдб, next-i18next рдЧрд╛рдЗрдб, рдпрд╛ Next.js + Intlayer рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВред
TanStack Start рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? TanStack Start + Lingui рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? Lingui рдмрдирд╛рдо Intlayer рдФрд░ next-i18next рдмрдирд╛рдо next-intl рдмрдирд╛рдо Intlayer рдкрдврд╝реЗрдВред
Next.js рдкрд░ Lingui рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ
i18n рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдореБрдЦ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рд╕рдорд╛рди 10-рдкреЗрдЬ, 10-рд▓реЛрдХреЗрд▓ Next.js рдРрдк рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдорд╛рдкрддрд╛ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред
рдбрд╛рдпрдирд╛рдорд┐рдХ JSON рд▓реЛрдбрд┐рдВрдЧ
рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЖрд▓рд╕реНрдп рд╕реЗ рдЕрдиреБрд╡рд╛рдж рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ
рд╕реНрдХреЛрдкреНрдб JSON (рдиреЗрдорд╕реНрдкреЗрд╕рд┐рдВрдЧ)
рдкреНрд░рддрд┐-рдкреГрд╖реНрда рдЕрдиреБрд╡рд╛рдж рдиреЗрдорд╕реНрдкреЗрд╕
I18n рдкреНрд░рджрд░реНрд╢рди рдмреЗрдВрдЪрдорд╛рд░реНрдХ
рдпрд╣ рдореАрдЯреНрд░рд┐рдХ рдХреНрдпрд╛ рд╣реИ?
рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдВрдбрд▓ рдХрд╛ рдХреБрд▓ gzip-рд╕рдВрдкреАрдбрд╝рд┐рдд рдЖрдХрд╛рд░ред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ рдФрд░ рдорд┐рдирд┐рдлрд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рдж рдкреНрд░рджрд╛рддрд╛ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИ?
рдПрдХ рдЫреЛрдЯрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдХрд╛рд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреЗрд▓реЛрдб рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рддреЗрдЬрд╝ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд╣реЛрддрд╛ рд╣реИред
рджреЗрдЦрдиреЗ рдХрд╛ рддрд░реАрдХрд╛
Next.js 16 рдкрд░ @lingui/core@6.6.0 рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЖрдВрдХрдбрд╝реЗ, 2026-09-26 рдХреЛ рдорд╛рдкреЗ рдЧрдП (gzip):
рд╕рднреА рдбреЗрдЯрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдореЛрдбрд▓ рдореЗрдВ рдЦреЛрд▓реЗрдВ
| рд╕реЗрдЯрдЕрдк | рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЖрдХрд╛рд░ | рдкреНрд░рддрд┐ рдкреЗрдЬ JS | рдЕрдиреНрдп-рд▓реЛрдХреЗрд▓ рд▓реАрдХ | рдЕрдиреНрдп-рдкреЗрдЬ рд▓реАрдХ |
|---|---|---|---|---|
| рдмрд┐рдирд╛ i18n (рдмреЗрд╕ рдРрдк) | - | 141.0 KB | 0% | 0% |
| Lingui, рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдПрдХ рдХреИрдЯрд▓реЙрдЧ | 72.1 KB | 145.4 KB | 2.8% | 89.9% |
@intlayer/lingui (рдХрдореНрдкреИрдЯ) | 10.7 KB | 221.6 KB | 50% | 90% |
next-intlayer (рдореВрд▓ Intlayer) | 4.9 KB | 141.5 KB | 0% | 0% |
рдореБрдЦреНрдп рдирд┐рд╖реНрдХрд░реНрд╖:
- рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдПрдХ рдПрдХрд▓ рдХреИрдЯрд▓реЙрдЧ рдЕрднреА рднреА рдЕрдиреНрдп рдкреЗрдЬреЛрдВ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдореЗрдВ рд▓реАрдХ рдХрд░рддрд╛ рд╣реИред рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ Server Components рдореЗрдВ рд░рдЦреЗрдВ, рдЬреЛ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ HTML рднреЗрдЬрддреЗ рд╣реИрдВ, рдХреИрдЯрд▓реЙрдЧ рдирд╣реАрдВред
- Lingui рд░рдирдЯрд╛рдЗрдо рдХрд╛ рд╡рдЬрди ~72 KB gzip рд╣реИред
@intlayer/linguiрдХрдореНрдкреИрдЯ рдЕрдбреИрдкреНрдЯрд░ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдШрдЯрд╛рдХрд░ ~11 KB рдХрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ Next.js рдХрдореНрдкреИрдЯ рд╕реЗрдЯрдЕрдк рдЕрднреА рднреА рдкреВрд░реЗ рдХреИрдЯрд▓реЙрдЧ рдХреЛ рдкреЗрдЬ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред рдореВрд▓next-intlayerAPI рд╡рд╣ рд╕реЗрдЯрдЕрдк рд╣реИ рдЬреЛ рдмреЗрд╕ рдРрдк рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред
рдкреВрд░рд╛ рдбреЗрдЯрд╛ рджреЗрдЦреЗрдВ: Next.js рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд░рд┐рдкреЛрд░реНрдЯ, рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАред
Next.js рдкрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛
Next.js App Router рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ Lingui рдХреА рддреБрд▓рдирд╛ next-intl рдФрд░ Intlayer рд╕реЗ рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИ:
рд╕рднреА рдбреЗрдЯрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдореЛрдбрд▓ рдореЗрдВ рдЦреЛрд▓реЗрдВ
| рд╕реБрд╡рд┐рдзрд╛ | next-intlayer (Intlayer) | Lingui | next-intl |
|---|---|---|---|
| рдШрдЯрдХреЛрдВ рдХреЗ рдкрд╛рд╕ рдЕрдиреБрд╡рд╛рдж | тЬЕ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рд╕рд╣-рд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИ | тЪая╕П рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реНрд░реЛрдд рдкрд╛рда, рдХреЗрдВрджреНрд░реАрдХреГрдд рдХреИрдЯрд▓реЙрдЧ | тЭМ рдХреЗрдВрджреНрд░реАрдХреГрдд JSON |
| TypeScript рдПрдХреАрдХрд░рдг | тЬЕ рд╕реНрд╡рддрдГ-рдЬрдирд░реЗрдЯреЗрдб рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ | тЪая╕П рдореИрдХреНрд░реЛрдЬрд╝ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╕рдВрджреЗрд╢ рдХреИрдЯрд▓реЙрдЧ рдирд╣реАрдВ | тЬЕ рдЕрдЪреНрдЫрд╛, AppConfig рд╡реГрджреНрдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ |
| рд▓рд╛рдкрддрд╛ рдЕрдиреБрд╡рд╛рдж рдкрд╣рдЪрд╛рди | тЬЕ TypeScript рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдФрд░ рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ | тЪая╕П рд╕реНрд░реЛрдд рдкрд╛рда рдкрд░ рд░рдирдЯрд╛рдЗрдо рдлрд╝реЙрд▓рдмреИрдХ | тЪая╕П рд░рдирдЯрд╛рдЗрдо рдлрд╝реЙрд▓рдмреИрдХ |
| рд░рд┐рдЪ рдХрдВрдЯреЗрдВрдЯ (JSX, Markdown) | тЬЕ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдорд░реНрдерди | тЬЕ <Trans> рдХреЗ рдЕрдВрджрд░ JSX, рдХреЛрдИ Markdown рдирд╣реАрдВ | тЪая╕П t.rich рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреИрдЧ, рдХреЛрдИ Markdown рдирд╣реАрдВ |
| AI рдЕрдиреБрд╡рд╛рдж | тЬЕ рдРрдк рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рджрд╛рддрд╛ рдФрд░ API рдХреБрдВрдЬреА | тЭМ рдирд╣реАрдВ | тЭМ рдирд╣реАрдВ |
| рд╡рд┐рдЬреБрдЕрд▓ рдПрдбрд┐рдЯрд░ / CMS | тЬЕ рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдЬреБрдЕрд▓ рдПрдбрд┐рдЯрд░ + рд╡реИрдХрд▓реНрдкрд┐рдХ CMS | тЭМ рдмрд╛рд╣рд░реА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ | тЭМ рдмрд╛рд╣рд░реА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ |
| рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд░реВрдЯрд┐рдВрдЧ | тЬЕ рдЗрди-рдмрд┐рд▓реНрдЯ | тЭМ рдЕрдкрдиреА рдЦреБрдж рдХреА proxy.ts рд▓рд┐рдЦреЗрдВ | тЬЕ рдЗрди-рдмрд┐рд▓реНрдЯ [locale] рд╕реЗрдЧрдореЗрдВрдЯ |
| рдмрд╣реБрд╡рдЪрди (Pluralization) | тЬЕ рдЧрдгрдирд╛-рдЖрдзрд╛рд░рд┐рдд | тЬЕ ICU, <Plural> рдореИрдХреНрд░реЛ | тЬЕ ICU |
| рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рд░реВрдк | тЬЕ .ts, .tsx, .js, .json, .md, .yaml | тЬЕ PO, JSON, CSV | тЬЕ .json, .js, .ts |
| ICU MessageFormat | тЬЕ format: "icu" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ | тЬЕ рдиреЗрдЯрд┐рд╡ | тЬЕ рдиреЗрдЯрд┐рд╡ |
| SEO рд╣реЗрд▓реНрдкрд░реНрд╕ (hreflang, sitemap) | тЬЕ рдореЗрдЯрд╛рдбреЗрдЯрд╛, рд╕рд╛рдЗрдЯрдореИрдк рдФрд░ robots.txt рд╣реЗрд▓реНрдкрд░реНрд╕ | тЭМ рдореИрдиреБрдЕрд▓ | тЬЕ рдЕрдЪреНрдЫрд╛ |
| Server Components | тЬЕ рдХрд┐рд╕реА рднреА Server Component рдореЗрдВ рд╕реАрдзрд╛ рдПрдХреНрд╕реЗрд╕ | тЪая╕П рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЖрдЙрдЯ рдФрд░ рдкреЗрдЬ рдореЗрдВ setI18n | тЪая╕П рдкреНрд░рддрд┐ рдШрдЯрдХ await getTranslations() |
| рдкреНрд░рддрд┐-рдШрдЯрдХ рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ | тЬЕ рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдкрд░ (Babel / SWC) | тЪая╕П рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдПрдХ рдХреИрдЯрд▓реЙрдЧ, рдкреНрд░рддрд┐-рдкреЗрдЬ рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯрд░ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣реИ | тЪая╕П рдореИрдиреБрдЕрд▓, рдкреНрд░рддрд┐ рд░реВрдЯ pick() рдХреЗ рд╕рд╛рде |
| рд░рдирдЯрд╛рдЗрдо рдЖрдХрд╛рд░ (gzip, рдмреЗрдВрдЪрдорд╛рд░реНрдХ) | 4.9 KB | 72.1 KB | 14.7 KB |
| CI рдореЗрдВ рд▓рд╛рдкрддрд╛ рдЕрдиреБрд╡рд╛рдж | тЬЕ npx intlayer test | тЬЕ lingui compile --strict | тЪая╕П рдЗрди-рдмрд┐рд▓реНрдЯ рдирд╣реАрдВ |
| рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо / рд╕рдореБрджрд╛рдп | тЪая╕П рдЫреЛрдЯрд╛, рддреЗрдЬреА рд╕реЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ | тЬЕ рдкрд░рд┐рдкрдХреНрд╡ | тЬЕ рдмрдбрд╝рд╛ |
рд░рдирдЯрд╛рдЗрдо рдЖрдХрд╛рд░ Next.js рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВред рд╡рд┐рд╕реНрддреГрдд рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, Lingui рдмрдирд╛рдо Intlayer рдкрдврд╝реЗрдВред
рдЕрдиреНрдп Next.js рдЧрд╛рдЗрдб: next-intl, next-i18next, рдФрд░ Intlayerред
рд╡реЗ рдЕрднреНрдпрд╛рд╕ рдЬрд┐рдирдХрд╛ рдЖрдкрдХреЛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
[locale]рд▓реЗрдЖрдЙрдЯ рдореЗрдВ<html>рдкрд░langрдФрд░dirрд╕реЗрдЯ рдХрд░реЗрдВред- рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд▓рд┐рдП Server Components рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ: рд╡реЗ рд╕рд░реНрд╡рд░ рдкрд░ HTML рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдХреИрдЯрд▓реЙрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
- рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЖрдЙрдЯ рдФрд░ рдкреЗрдЬ рдореЗрдВ
initLingui(locale)рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкрд░ рд▓реЗрдЖрдЙрдЯ рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдкреЗрдЬ рдЕрдкрдиреЗ рд▓реЗрдЖрдЙрдЯ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдХреЗрд▓ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд░рд╣ рд╕рдХрддрд╛ рд╣реИред - рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдПрдХ URL рд░рдЦреЗрдВ рдФрд░
generateStaticParamsрдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдХреЗрд▓ рдХреЛ рдкреНрд░реА-рд░реЗрдВрдбрд░ рдХрд░реЗрдВред canonical,hreflangрдФрд░x-defaultрдХреЗ рд╕рд╛рдеgenerateMetadataрдореЗрдВ рдЕрдкрдиреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВредsitemap.tsрдФрд░robots.tsрд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрднрд╛рд╖реА рд╕рд╛рдЗрдЯрдореИрдк рдФрд░ robots.txt рдЬрдирд░реЗрдЯ рдХрд░реЗрдВред- рд▓реЛрдХреЗрд▓ рд╕реНрд╡рд┐рдЪрд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдХреНрд░реЙрд▓рд░ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЛ рдЦреЛрдЬ рд╕рдХреЗрдВред
- CI рдореЗрдВ
lingui extractрдЪрд▓рд╛рдПрдВ рддрд╛рдХрд┐ рдХреЛрдИ рдирдпрд╛ рд╕рдВрджреЗрд╢ рдХрднреА рднреА рдмрд┐рдирд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рди рдЬрд╛рдПред
рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдФрд░ SEO, hreflang рдЧрд╛рдЗрдб рдФрд░ Next.js рдмрд╣реБрднрд╛рд╖реА SEO рддреБрд▓рдирд╛ рдкрд░ рд╣рдорд╛рд░рд╛ рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВред
Next.js рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ Lingui рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЧрд╛рдЗрдб
рдпрд╣рд╛рдБ рд╡рд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдмрдирд╛рдПрдВрдЧреЗ:
рдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (Install Dependencies)
bashрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
- @lingui/core / @lingui/react: рд░рдирдЯрд╛рдЗрдо,
I18nProvider, Server Components рдХреЗ рд▓рд┐рдПsetI18n, рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ (@lingui/core/macro,@lingui/react/macro)ред - @lingui/swc-plugin: Next.js SWC рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдЕрдВрджрд░ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред
- @lingui/loader: рдЖрдпрд╛рдд рдкрд░
.poрдХреИрдЯрд▓реЙрдЧ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдПlingui compileрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред - @lingui/cli: рдХреИрдЯрд▓реЙрдЧ рдореЗрдВ рд╕рдВрджреЗрд╢ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
lingui extractред
@lingui/swc-pluginрдПрдХ WebAssembly рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреЛ Next.js рдХреЗ SWC рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдпрджрд┐ Next.js рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рдмрд╛рдж рдмрд┐рд▓реНрдб рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЙрд╕рдХреЗ README рдореЗрдВ рд╕рдВрдЧрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред- @lingui/core / @lingui/react: рд░рдирдЯрд╛рдЗрдо,
рдЕрдкрдиреЗ рд▓реЛрдХреЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЗрдВрджреНрд░реАрдХреГрдд рдХрд░реЗрдВ
рдПрдХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдХреЗрд▓ рдФрд░ URL рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред рд░реВрдЯрд┐рдВрдЧ, рдореЗрдЯрд╛рдбреЗрдЯрд╛, рд╕рд╛рдЗрдЯрдореИрдк рдФрд░ Lingui рд╕рднреА рдЗрд╕рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВред
src/i18n/config.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
Lingui рдФрд░ Next.js рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
lingui.config.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
SWC рдкреНрд▓рдЧрдЗрди рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд▓реЛрдбрд░ Turbopack (Next.js 16 рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдФрд░ webpack рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП
.poрдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:next.config.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдПрдХреНрд╕рдЯреНрд░реИрдХреНрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ:
package.jsonрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреИрдЯрд▓реЙрдЧ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВ
Server Components рдореЗрдВ рдХреЛрдИ React context рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП Lingui рд╡рд░реНрддрдорд╛рди рд░реЗрдВрдбрд░ рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
setI18nрдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рддреНрдпреЗрдХ рдХреИрдЯрд▓реЙрдЧ рдХреЛ рдкреНрд░рддрд┐ рд╕рд░реНрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдмрд╛рд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдПрдХI18nрдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣server-onlyрд╣реИ: рдЕрдиреНрдп рд▓реЛрдХреЗрд▓ рдХреЗ рдХреИрдЯрд▓реЙрдЧ рдХрднреА рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдВрдбрд▓ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВредsrc/i18n/appRouterI18n.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
src/i18n/initLingui.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
TypeScript рджреНрд╡рд╛рд░рд╛
.poрдЖрдпрд╛рдд рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рдмрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:src/i18n/po.d.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдмрдирд╛рдПрдВ
Client Components рдПрдХ React context рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдкрдврд╝рддреЗ рд╣реИрдВред рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд╕рд░реНрд╡рд░ рд▓реЗрдЖрдЙрдЯ рд╕реЗ рд╕рдХреНрд░рд┐рдп рд▓реЛрдХреЗрд▓ рдХрд╛ рдХреИрдЯрд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдПрдХ рдмрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИред
src/components/LinguiClientProvider.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓реЛрдХреЗрд▓ рд░реВрдЯреНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
[locale]рд╕реЗрдЧрдореЗрдВрдЯ рд░реВрдЯ рд▓реЗрдЖрдЙрдЯ рдХреЛ рд░рдЦрддрд╛ рд╣реИредgenerateStaticParamsрдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдХреЗрд▓ рдХреЛ рдкреНрд░реА-рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░dynamicParams = falseрдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП 404 рд▓реМрдЯрд╛рддрд╛ рд╣реИредsrc/app/[locale]/layout.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд╕рдХреНрд░рд┐рдп рд▓реЛрдХреЗрд▓ рдХрд╛ рдкреВрд░рд╛ рдХреИрдЯрд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЗрд╕реЗ "рдЕрдиреНрдп-рдкреЗрдЬ рд▓реАрдХ" рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдкрддрд╛ рд╣реИред Server Components рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рд░рдЦрдиреЗ рд╕реЗ рд╡рд╣ рд╕реАрдорд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдмрдбрд╝реЗ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП, Lingui рдХрд╛ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдкреНрд░рддрд┐-рдкреЗрдЬ рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯрд░ (
lingui.config.tsрдореЗрдВexperimental.extractor) рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдХреИрдЯрд▓реЙрдЧ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИредServer Components рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
Server Components, Client Components рдХреЗ рд╕рдорд╛рди рд╣реА рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
initLinguiрдХреЛ рдкреЗрдЬ рдореЗрдВ рднреА рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд▓реЗрдЖрдЙрдЯ рдЕрдкрдиреЗ рдкреЗрдЬреЛрдВ рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИредsrc/app/[locale]/about/page.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
Client Components рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
Client Components рд╕рдорд╛рди рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдХреНрд░реЛрдЬрд╝
LinguiClientProviderрд╕реЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрдврд╝рддреЗ рд╣реИрдВредsrc/components/Counter.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢ рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ
рдПрдХреНрд╕рдЯреНрд░реИрдХреНрд╢рди рдЪрд▓рд╛рдПрдВред Lingui
srcрдореЗрдВ рдкрд╛рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдХреЗрд▓ рдХреИрдЯрд▓реЙрдЧ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ:bashрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ
msgstrрдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ:src/locales/fr/messages.poрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
src/locales/es/messages.poрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
<0>рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░<Trans>рдХреЗ JSX рддрддреНрд╡реЛрдВ рдХреЛ рдпрдерд╛рд╕реНрдерд╛рди рд░рдЦрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЕрдиреБрд╡рд╛рджрдХ рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдЫреБрдП рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХреЗрдВредрд▓реЛрдХреЗрд▓ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рд╕реЗрдЯ рдХрд░реЗрдВ
рд╡реИрдХрд▓реНрдкрд┐рдХNext.js 16 рдиреЗ
middleware.tsрдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░proxy.tsрдХрд░ рджрд┐рдпрд╛ред рдкреНрд░реЙрдХреНрд╕реА "рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░" рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рд░рдгрдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:/fr/aboutрдХреЛ рд╡реИрд╕реЗ рд╣реА рд╕рд░реНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;/en/about/aboutрдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд (redirect) рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХреЗрд▓ рдХрд╛ рдПрдХ рд╣реА URL рд╣реЛрддрд╛ рд╣реИ;/aboutрдХреЛ URL рдмрджрд▓реЗ рдмрд┐рдирд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ/en/aboutрдкрд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ (rewrite) рдЬрд╛рддрд╛ рд╣реИ;/рдкрд░ рдкрд╣рд▓реА рд╡рд┐рдЬрд╝рд┐рдЯ рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреА рд╣реИ (рдкрд╣рд▓реЗ рдХреБрдХреА, рдлрд┐рд░Accept-Language)ред
src/i18n/negotiateLocale.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
src/proxy.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХреА рднрд╛рд╖рд╛ рдмрджрд▓реЗрдВ
рд╡реИрдХрд▓реНрдкрд┐рдХusePathnameрдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЧрдП URL (/aboutрдпрд╛/fr/about) рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд▓реЛрдХреЗрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХрд╛ рд▓рд┐рдВрдХ рдмрдирд╛рдПрдВред рд╕реНрд╡рд┐рдЪрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд┐рдВрдХ рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреНрд░реЙрд▓рд░ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдг рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдХреА рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдпрд╛рдж рд░рдЦрддреА рд╣реИредsrc/components/LocaleSwitcher.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдПрдХ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд▓рд┐рдВрдХ рдШрдЯрдХ рдмрдирд╛рдПрдВ
рд╡реИрдХрд▓реНрдкрд┐рдХsrc/components/LocalizedLink.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдпрд╣ Server Components рд╕реЗ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣
LinguiClientProviderрдХреЗ рдЕрдВрджрд░ рд░реЗрдВрдбрд░ рд╣реЛрддрд╛ рд╣реИ:tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдЕрдкрдиреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХрд╛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХрд░реЗрдВ
рд╡реИрдХрд▓реНрдкрд┐рдХрдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрдиреЗ рджрдо рдкрд░ рд░реИрдВрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд╢рд░реНрддреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдЬ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗ:
- рдПрдХ рдЕрдиреБрд╡рд╛рджрд┐рдд
titleрдФрд░description; - рд╕реНрд╡рдпрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ canonical URL;
- рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдПрдХ
hreflangalternate, рд╕рд╛рде рд╣реАx-default; - Open Graph
locale,alternateLocaleрдФрд░url; inLanguageрдХреЗ рд╕рд╛рде JSON-LDред
generateMetadataReact рдЯреНрд░реА рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣msgрдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рд╕рд░реНрд╡рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:src/i18n/metadata.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
src/app/[locale]/about/page.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
JSON-LD рд╕реНрд╡рдпрдВ рдкреЗрдЬ рджреНрд╡рд╛рд░рд╛ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреЗрдЬ рдлрд╝рд╛рдЗрд▓реЗрдВ рдХреЗрд╡рд▓ Next.js рдлрд╝реАрд▓реНрдб рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдШрдЯрдХ рдХреЛ рдЙрд╕рдХреА рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦреЗрдВ:
src/components/WebPageJsonLd.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
src/app/[locale]/about/page.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
- рдПрдХ рдЕрдиреБрд╡рд╛рджрд┐рдд
рдЕрдкрдиреЗ рд╕рд╛рдЗрдЯрдореИрдк рдХрд╛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХрд░реЗрдВ
рд╡реИрдХрд▓реНрдкрд┐рдХsitemap.tsрдкрд░рдВрдкрд░рд╛alternates.languagesрдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ Next.jsxhtml:linkрдЕрд▓реНрдЯрд░рдиреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдХреЗрд▓ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ URL рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ:src/app/sitemap.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдЕрдкрдиреЗ robots.txt рдХрд╛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХрд░реЗрдВ
рд╡реИрдХрд▓реНрдкрд┐рдХрдирд┐рдЬреА рд░реВрдЯреНрд╕ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП
disallowрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдкрде рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:src/app/robots.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рд╕реНрдерд╛рдиреАрдпрдХреГрдд 404 рдкреЗрдЬреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВ
рд╡реИрдХрд▓реНрдкрд┐рдХnot-found.tsx[locale]рд▓реЗрдЖрдЙрдЯ рдХреЗ рдЕрдВрджрд░ рд░реЗрдВрдбрд░ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдкрд╛рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИред рдХреИрдЪ-рдСрд▓ рд░реВрдЯ рдХрд┐рд╕реА рд▓реЛрдХреЗрд▓ рдХреЗ рдЕрдВрджрд░ рдЕрдЬреНрдЮрд╛рдд рдкрдереЛрдВ рдХреЛ рдЗрд╕ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред Next.js 404 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗnoindexрдЬреЛрдбрд╝рддрд╛ рд╣реИредsrc/app/[locale]/not-found.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
src/app/[locale]/[...rest]/page.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
Server Actions рдореЗрдВ рд▓реЛрдХреЗрд▓ рддрдХ рдкрд╣реБрдВрдЪреЗрдВ
рд╡реИрдХрд▓реНрдкрд┐рдХServer Actions рдХреЛ рд░реВрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕ рдкреЗрдЬ рд╕реЗ рдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рд▓реЛрдХреЗрд▓ рднреЗрдЬреЗрдВ рдЬрд┐рд╕реЗ рдпрд╣ рдкрддрд╛ рд╣реИ:
src/app/[locale]/contact/page.tsxрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
src/app/actions/sendContactMessage.tsрдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВрдХреЛрдб рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ
рдЕрдкрдиреЗ рдореИрдХреНрд░реЛрдЬрд╝ рдмрдирд╛рдП рд░рдЦреЗрдВ, Intlayer рдХреЗ рд╕рд╛рде рд░рдирдЯрд╛рдЗрдо рдШрдЯрд╛рдПрдВ
рд╡реИрдХрд▓реНрдкрд┐рдХ@intlayer/linguiрдХрдореНрдкреИрдЯ рдЕрдбреИрдкреНрдЯрд░ рдЖрдкрдХреЗ рд╕реНрд░реЛрдд рдХреЛ рдЕрдЫреВрддрд╛ рд░рдЦрддрд╛ рд╣реИ: рдореИрдХреНрд░реЛрдЬрд╝ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдореАi18n._(),useLingui()рдФрд░<Trans>рдХреЙрд▓ Intlayer рд╢рдмреНрджрдХреЛрд╢реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реЗрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред Next.js рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ, рд░рдирдЯрд╛рдЗрдо ~72.1 KB рд╕реЗ рдШрдЯрдХрд░ ~10.7 KB gzip рд╣реЛ рдЬрд╛рддрд╛ рд╣реИредNext.js рдкрд░, рдЕрдбреИрдкреНрдЯрд░ рдХреЛ
next.config.ts(webpack рдФрд░ Turbopack) рдореЗрдВ@lingui/coreрдФрд░@lingui/reactрдХреЛ@intlayer/linguiрдореЗрдВ рдЙрдкрдирд╛рдо (alias) рджреЗрдХрд░, рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдХреЛnext-intlayer/serverрд╕реЗwithIntlayerрдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдХрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред@lingui/swc-pluginрдмрдирд╛рдП рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рдЕрднреА рднреА рдкрд╣рд▓реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдВред рдкреВрд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди Lingui рдХрдореНрдкреИрдЯ рдЧрд╛рдЗрдб рдореЗрдВ рд╣реИредрдЬреИрд╕рд╛ рдХрд┐ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЕрдбреИрдкреНрдЯрд░ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди Next.js рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдЬ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреИрдЯрд▓реЙрдЧ рдХреЛ рдЕрднреА рдХрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╡рд╛рд╕рди рд╕реЗрддреБ (migration bridge) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧреЗ, рддреЛ рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдореВрд▓
useIntlayerAPI рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдЬреЛ рдХреЗрд╡рд▓ рд╡рд╣реА рд╕рд╛рдордЧреНрд░реА рднреЗрдЬрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред Next.js + Intlayer рдЧрд╛рдЗрдб, Lingui рдмрдирд╛рдо @intlayer/lingui рдФрд░ рд╕рднреА рдХрдореНрдкреИрдЯ рдЕрдбреИрдкреНрдЯрд░ рджреЗрдЦреЗрдВредIntlayer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрд╡рд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░реЗрдВ
рд╡реИрдХрд▓реНрдкрд┐рдХLingui рд╕рдВрджреЗрд╢ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджрд░реНрдЬрдиреЛрдВ рдХреИрдЯрд▓реЙрдЧ рдХреЛ рд╣рд╛рде рд╕реЗ рднрд░рдирд╛ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рд╡реНрдпрддреАрдд рд╣реЛрддрд╛ рд╣реИред Intlayer рдирд┐рдГрд╢реБрд▓реНрдХ рдФрд░ рдУрдкрди рд╕реЛрд░реНрд╕ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЯреВрд▓ Lingui рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
- рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА API рдХреБрдВрдЬреА рдФрд░ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ AI рдХреЗ рд╕рд╛рде рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВред рдСрдЯреЛ рдлрд┐рд▓ рдФрд░ CLI рджреЗрдЦреЗрдВред
- sync PO рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рд╕рддреНрдп рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреА PO рдлрд╝рд╛рдЗрд▓реЗрдВ рд░рдЦреЗрдВред
- CI рдореЗрдВ рд▓рд╛рдкрддрд╛ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рдЕрдкрдиреЗ рдЕрдиреБрд╡рд╛рджреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рджреЗрдЦреЗрдВред
- scan рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд▓рд╛рдкрддрд╛
hreflang, рдЧрд▓рдд canonical рдФрд░ рд▓реЛрдХреЗрд▓ рд▓реАрдХ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рддреИрдирд╛рдд рд╕рд╛рдЗрдЯ рдХрд╛ рдСрдбрд┐рдЯ рдХрд░реЗрдВред
рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди
рд╣рд╛рдБред @lingui/react React Server Components рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред Server Components @lingui/react/server рд╕реЗ setI18n рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, Client Components рдЗрд╕реЗ I18nProvider рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рдФрд░ рджреЛрдиреЛрдВ рд╕рдорд╛рди Trans рдФрд░ useLingui рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
Server Components рдореЗрдВ рдХреЛрдИ context рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкреНрд░рддрд┐ рд░реЗрдВрдбрд░ рдкрдВрдЬреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдЖрдЙрдЯ рдкреВрд░реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣рддреЗ рд╣реИрдВ рдФрд░ рджреЛрдмрд╛рд░рд╛ рд░реЗрдВрдбрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдкреЗрдЬ рд▓реЛрдХреЗрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд▓реЗрдЖрдЙрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд░рд╣ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЖрдЙрдЯ рдФрд░ рдкреЗрдЬ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ initLingui(locale) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рд╡реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░рд╣рддреЗ рд╣реИрдВред
@lingui/swc-plugin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ SWC рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдФрд░ Turbopack рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред Babel рдХреЙрдиреНрдлрд╝рд┐рдЧ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ Next.js рдореЗрдВ SWC рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд┐рд▓реНрдб рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рд╢рд░реНрдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд▓рдЧрдЗрди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЖрдкрдХреЗ Next.js рд░рд┐рд▓реАрдЬрд╝ рдХреЗ SWC рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд░рдЦрд╛ рдЬрд╛рдПред
getI18nInstance(locale) рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ msg рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ: i18n._(msg`About us`)ред alternates.canonical, x-default рдХреЗ рд╕рд╛рде alternates.languages, рдФрд░ openGraph.locale рд▓реМрдЯрд╛рдПрдВред рдЪрд░рдг 13 рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╣реЗрд▓реНрдкрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП ~72 KB gzip рдорд╛рдкрддрд╛ рд╣реИред рдкреНрд░рддрд┐ рд▓реЛрдХреЗрд▓ рдПрдХ рдХреИрдЯрд▓реЙрдЧ рдХреЗ рд╕рд╛рде, рдмрд┐рдирд╛ i18n рд╡рд╛рд▓реЗ 141 KB рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдкреЗрдЬреЛрдВ рдХрд╛ рд╡рдЬрди ~145 KB рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдЬ рдЕрднреА рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреНрдп рдкреЗрдЬреЛрдВ рдХреЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
Lingui рдЙрди рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬреЛ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реНрд░реЛрдд рдЯреЗрдХреНрд╕реНрдЯ рд▓рд┐рдЦрдирд╛ рдФрд░ PO рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдерд╛ рдЕрдиреБрд╡рд╛рджрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреА рд╣реИрдВред next-intl рдЙрди рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬреЛ JSON рдХреИрдЯрд▓реЙрдЧ рдФрд░ Next.js рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд t("key") API рдкрд╕рдВрдж рдХрд░рддреА рд╣реИрдВред next-i18next i18next рдкреНрд▓рдЧрдЗрди рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рд▓рд╛рддрд╛ рд╣реИред next-i18next рдмрдирд╛рдо next-intl рдмрдирд╛рдо Intlayer рдФрд░ Next.js рдмреЗрдВрдЪрдорд╛рд░реНрдХ рджреЗрдЦреЗрдВред
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
рдЕрднреА рддрдХ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВред рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдмрдиреЗрдВред
