ΠΠ»Ρ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠ°Π±Π»ΠΎΠ½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π‘ΠΏΡΠΎΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ²ΠΎΠ΄ΠΊΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° AI
ΠΡΡΠΎΡΠΈΡ Π²Π΅ΡΡΠΈΠΉ
- "ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π·Π²Π΅Π·Π΄ GitHub"v8.9.818.05.2026
- "ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°"v8.7.506.01.2026
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠ.
Π‘ΠΌΠΎΡΡΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΈΠ΄Π΅Ρ ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½Π΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ Π²Π½Π΅ΡΡΠΈ ΡΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄, ΠΏΠΎΠ΄Π°Π² Π·Π°ΠΏΡΠΎΡ Π½Π° Π²ΡΡΡΠ³ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° GitHub.
Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ GitHubΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Markdown Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ i18n Π΄Π»Ρ Next.js - ΠΡΡΠ΅Ρ ΠΎ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ΅ 2026
ΠΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΡΡΠ΅Ρ ΠΎ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ΅ i18n-ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Next.js.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° JSON
ΠΠ΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ JSON (ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½)
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ
ΠΠ΅Π½ΡΠΌΠ°ΡΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ I18n
Π§ΡΠΎ ΡΡΠΎ Π·Π° ΠΌΠ΅ΡΡΠΈΠΊΠ°?
ΠΠ±ΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ gzip. ΠΠ½ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ ΠΈ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΏΠΎΡΠ»Π΅ tree-shaking ΠΈ ΠΌΠΈΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ?
ΠΠ΅Π½ΡΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ JavaScript, ΡΡΠΎ ΡΡΠΊΠΎΡΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅.
ΠΠΈΠ΄
Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ:
ΠΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΠΎΠ»Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°
ΠΠΎΠ»Π½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π·Π΄Π΅ΡΡ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΡΠΊ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΡΠ΅ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΡΡΡΠ°Π½ΠΈΡΡ.
ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΡΡΠ° Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π½Π΄Π»Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΠΈ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Ρ ΡΠ΄ΡΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΠΏΠΎΡΡΠΈ Π² 4 ΡΠ°Π·Π° Π±ΠΎΠ»ΡΡΠ΅.
ΠΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ i18n ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π² ΠΌΡΠ»ΡΡΠΈΡΠ·ΡΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ ΠΎΡΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ»ΠΎΠΆΠ½Π°, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ - ΠΎΠ΄Π½ΠΈ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ Π½Π° DX, Π΄ΡΡΠ³ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Intlayer ΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΠΈ Π°ΡΠΏΠ΅ΠΊΡΡ.
TL;DR
- Intlayer ΠΈ next-translate: ΠΡΡΡΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Next.js, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ Π»ΡΡΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°.
- next-intl: Π‘Π°ΠΌΡΠΉ ΠΌΠΎΠ΄Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, Π½ΠΎ ΡΡΠΆΠ΅Π»ΡΠΉ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠΉ Π² ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
- next-i18next: ΠΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΠΈ Π±ΠΎΠ³Π°ΡΡΠΉ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π²Π΅Ρ Π±Π°Π½Π΄Π»Π° (~3Γ Intlayer).
- ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅: gt-next ΠΈ lingo.dev ΠΈΠ·-Π·Π° ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ, ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΊ Π²Π΅Π½Π΄ΠΎΡΡ ΠΈ Π±Π°Π³ΠΎΠ², Π»ΠΎΠΌΠ°ΡΡΠΈΡ ΡΠ±ΠΎΡΠΊΡ.
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π§ΡΠΎΠ±Ρ Π²ΡΡΠ²ΠΈΡΡ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ ΡΠΎΠ·Π΄Π°Π» Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΡΠΊΠ°Π½Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π·Π΄Π΅ΡΡ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ Π²Π»ΠΈΡΠ½ΠΈΠ΅ ΠΌΡΠ»ΡΡΠΈΡΠ·ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Π²Π°Ρ Π±Π°Π½Π΄Π»:
- Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ JSON (ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°) ΠΏΠΎ ΡΠ°ΠΉΠ»Π°ΠΌ / ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ / ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌ ΠΈΠΌΠ΅Π½ (namespaces), ΡΡΠΎΠ±Ρ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠ³ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ (tree-shake) Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ.
- ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΡΡΡΠ°Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ²:
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ°
ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΡ ΡΠΈΠΏΠ° [locale]/page.tsx, Ρ Webpack ΠΈΠ»ΠΈ Turbopack, ΠΈ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ generateStaticParams, ΡΠ±ΠΎΡΡΠΈΠΊ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ locale ΠΊΠ°ΠΊ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΠ·ΡΠΊΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΡΡΠΎ - Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΡΠ΅ΡΠ΅Π· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, import('./locales/${locale}.json')).
ΠΠ° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Next.js ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ΄ΠΈΠ½ JS-Π±Π°Π½Π΄Π» Π½Π° Π»ΠΎΠΊΠ°Π»Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ./locales_fr_12345.js). ΠΠΎΠ³Π΄Π° ΡΠ°ΠΉΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΈ ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ, Π±ΡΠ°ΡΠ·Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ HTTP-Π·Π°ΠΏΡΠΎΡ Π΄Π»Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ JS-ΡΠ°ΠΉΠ»Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ./locales_fr_12345.js).
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅fetch()Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ JSON. Π’Π°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅ΡTolgee, ΠΊΠΎΠ³Π΄Π° JSON Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²/public, ΠΈΠ»ΠΈnext-translate, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π°getStaticPropsΠ΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°. ΠΡΠΎΡΠ΅ΡΡ ΡΠΎΡ ΠΆΠ΅: Π±ΡΠ°ΡΠ·Π΅Ρ Π΄Π΅Π»Π°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ HTTP-Π·Π°ΠΏΡΠΎΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ΅ΡΡΡΡΠ°.
Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠΈΠΏΠ° const t = useTranslation() + t('my-object.my-sub-object.my-key'), Π²Π΅ΡΡ JSON ΠΎΠ±ΡΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π² Π±Π°Π½Π΄Π»Π΅, ΡΡΠΎΠ±Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΌΠΎΠ³Π»Π° Π΅Π³ΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΠΊΠ»ΡΡ. ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² ΡΠ±ΠΎΡΠΊΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅.
Π§ΡΠΎΠ±Ρ ΡΠΌΡΠ³ΡΠΈΡΡ ΡΡΠΎ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΡΠΎΡΡΡ Π²Π°Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π·Π°Π³ΡΡΠΆΠ°ΡΡ - Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, next-i18next, next-intl, lingui, next-translate, next-international.
ΠΠ°ΠΏΡΠΎΡΠΈΠ², Paraglide Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ°Π³ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ±ΠΎΡΠΊΠΎΠΉ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ JSON Π² ΠΏΠ»ΠΎΡΠΊΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ const en_my_var = () => 'my value'. Π’Π΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅. ΠΠ°ΠΊ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π²ΡΠ΅ ΠΆΠ΅ Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΡ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Intlayer ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ useIntlayer('my-key') Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π½Π°ΠΏΡΡΠΌΡΡ.
ΠΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° ΠΌΡ ΡΡΠ°Π²Π½ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
Base App(ΠΠ΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ i18n)next-intlayer(v8.7.12)next-i18next(v16.0.5)next-intl(v4.9.1)@lingui/core(v5.3.0)next-translate(v3.1.2)next-international(v1.3.1)@inlang/paraglide-js(v2.15.1)@tolgee/react(v7.0.0)@lingo.dev/compiler(v0.4.0)wuchale(v0.22.11)gt-next(v6.16.5)
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Next.js Π²Π΅ΡΡΠΈΠΈ 16.2.4 Ρ App Router.
Π― ΠΏΠΎΡΡΡΠΎΠΈΠ» ΠΌΡΠ»ΡΡΠΈΡΠ·ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ 10 ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ ΠΈ 10 ΡΠ·ΡΠΊΠ°ΠΌΠΈ.
Π― ΡΡΠ°Π²Π½ΠΈΠ» ΡΠ΅ΡΡΡΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ:
ΠΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π² ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π΄Π»Ρ ΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ
| Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡ | ΠΠ΅Π· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ (Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ) | Π‘ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌΠΈ ΠΈΠΌΠ΅Π½ (Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ/scoped) |
|---|---|---|
| Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° | Static: ΠΡΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅. | Scoped static: Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌ ΠΈΠΌΠ΅Π½; Π²ΡΠ΅ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅. |
| ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° | Dynamic: ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΏΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΠΈ. | Scoped dynamic: ΠΡΠ°Π½ΡΠ»ΡΡΠ½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌ ΠΈΠΌΠ΅Π½ ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠΌ. |
Π Π΅Π·ΡΠΌΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ
- Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ (Static): ΠΡΠΎΡΡΠΎΡΠ°; ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ ΡΠ΅ΡΠΈ ΠΏΠΎΡΠ»Π΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ. ΠΠΈΠ½ΡΡ: Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π½Π΄Π»Π°.
- ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ (Dynamic): Π£ΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ Π²Π΅Ρ (Π»Π΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ°). ΠΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π»ΠΎΠΊΠ°Π»Π΅ΠΉ.
- ΠΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ (Scoped static): ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ (Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅) Π±Π΅Π· ΡΠ»ΠΎΠΆΠ½ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π²ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ².
- ΠΠΎΠΊΠ°Π»ΡΠ½Π°Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ (Scoped dynamic): ΠΡΡΡΠΈΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π»Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ, Π·Π°Π³ΡΡΠΆΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ.
Π§ΡΠΎ Ρ ΠΈΠ·ΠΌΠ΅ΡΡΠ»:
Π― Π·Π°ΠΏΡΡΠΊΠ°Π» ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΌΡΠ»ΡΡΠΈΡΠ·ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ°, Π° Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°Π», ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΠΎΡΡ ΠΏΠΎ ΡΠ΅ΡΠΈ ΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠΎ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΎ. Π Π°Π·ΠΌΠ΅ΡΡ ΡΠΊΠ°Π·Π°Π½Ρ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π²Π΅Π±-ΡΠΆΠ°ΡΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΡΠΊΠ°ΡΠΈΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, ΡΠ΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
Π Π°Π·ΠΌΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ: ΠΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ, tree-shaking ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°Π·ΠΌΠ΅Ρ i18n-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ - ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
NextIntlClientProvider) + ΠΊΠΎΠ΄ Ρ ΡΠΊΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,useTranslations) Π² ΠΏΡΡΡΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅. ΠΡΠΎ Π½Π΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°. ΠΡΠΎ ΠΎΡΠ²Π΅Ρ Π½Π° Π²ΠΎΠΏΡΠΎΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ "Π΄ΠΎΡΠΎΠ³Π°Ρ" Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ Π΄ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.JavaScript Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ: ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΡΡΡΠ° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° - ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π±ΡΠ°ΡΠ·Π΅Ρ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΏΡΠΈ ΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈΠΈ, ΡΡΡΠ΅Π΄Π½Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌ Π² Π½Π°Π±ΠΎΡΠ΅ (ΠΈ ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΡΠΌ, Π³Π΄Π΅ ΠΎΡΡΠ΅Ρ ΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ). Π’ΡΠΆΠ΅Π»ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ - ΡΡΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ.
Π£ΡΠ΅ΡΠΊΠ° ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ: ΠΡΠΎ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ, Π½ΠΎ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΡΡ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ·Π±Π΅Π³Π°ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΡΡΡΠ°Π½ΠΈΡΡ
/fr/aboutΠ² Π±Π°Π½Π΄Π»Π΅ ΡΡΡΠ°Π½ΠΈΡΡ/en/about).Π£ΡΠ΅ΡΠΊΠ° ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΠΌΠ°ΡΡΡΡΡΠΎΠ²: Π’Π° ΠΆΠ΅ ΠΈΠ΄Π΅Ρ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΡΠΊΡΠ°Π½ΠΎΠ² Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ: ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π»ΠΈ ΠΈΡ ΡΠ΅ΠΊΡΡ Π² ΡΠ±ΠΎΡΠΊΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΎΡΠΊΡΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΡΡΡΠ°Π½ΠΈΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΡΡΡΠ°Π½ΠΈΡΡ
/en/aboutΠ² Π±Π°Π½Π΄Π»Π΅ ΡΡΡΠ°Π½ΠΈΡΡ/en/contact). ΠΡΡΠΎΠΊΠΈΠΉ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΠ»ΠΎΡ ΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠΈΡΠΎΠΊΠΈΠ΅ Π±Π°Π½Π΄Π»Ρ.Π‘ΡΠ΅Π΄Π½ΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π½Π΄Π»Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°: ΠΠ±ΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈΠ·ΠΌΠ΅ΡΡΡΡΡΡ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ, Π° Π½Π΅ ΠΏΡΡΡΡΡΡΡ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³ΠΈΠ³Π°Π½ΡΡΠΊΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π½Π΅ ΡΠ°Π·Π΄ΡΠ²Π°Π΅Ρ Π»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Π΄Π΅ΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π²ΡΠ΅ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΈΠ²ΡΠ·ΠΊΠ° Π³ΠΈΠ³Π°Π½ΡΡΠΊΠΎΠ³ΠΎ JSON-ΡΠ°ΠΉΠ»Π° ΠΊ Π»ΡΠ±ΠΎΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π²Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
Π‘ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ°: Π― ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Ρ ΡΠ·ΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΡΠ΅ΠΊΠ°Ρ Π²ΡΠ΅ΠΌΡ, ΠΏΠΎΠΊΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ²Π½ΠΎ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡ - ΡΠΎ, ΡΡΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ, Π° Π½Π΅ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΡΠΉ ΠΌΠΈΠΊΡΠΎ-ΡΠ°Π³.
Π Π°Π±ΠΎΡΠ° ΠΏΠΎ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΌΠ΅Π½Ρ ΡΠ·ΡΠΊΠ°: ΠΠΎΠ»Π΅Π΅ ΡΠ·ΠΊΠΎΠ΅ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅: ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΈΠ»ΠΈΠΉ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π° Π½ΠΎΠ²ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΠΎΡΠ»Π΅ Π½Π°ΡΠ°Π»Π° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° "ΠΎΡΡΡΠ°Π΅ΠΌΠΎΠ΅" Π²ΡΠ΅ΠΌΡ ΠΈ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° ΡΠ°ΡΡ ΠΎΠ΄ΡΡΡΡ.
ΠΡΠ΅ΠΌΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΡ: ΠΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ°ΡΠ·Π΅Ρ ΡΡΠΈΡΠ°Π΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π². Π₯ΠΎΡΠΎΡΠΎ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ "Ρ ΠΎΠ»ΠΎΠ΄Π½ΡΡ ΡΡΠ°ΡΡΠΎΠ²".
ΠΡΠ΅ΠΌΡ Π³ΠΈΠ΄ΡΠ°ΡΠ°ΡΠΈΠΈ: ΠΠΎΠ³Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ - ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΡΠ°ΡΠΈΡ Π½Π° ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ HTML Π² Π½Π΅ΡΡΠΎ, Π½Π° ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ. ΠΡΠΎΡΠ΅ΡΠΊ Π² ΡΠ°Π±Π»ΠΈΡΠ°Ρ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΄Π°Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»Π° Π½Π°Π΄Π΅ΠΆΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ Π³ΠΈΠ΄ΡΠ°ΡΠ°ΡΠΈΠΈ Π² ΡΡΠΎΠΌ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ΅.
ΠΠ²Π΅Π·Π΄Ρ Π½Π° GitHub
ΠΠ²Π΅Π·Π΄Ρ Π½Π° GitHub - ΡΡΠΎ ΡΠΈΠ»ΡΠ½ΡΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π΄ΠΎΠ²Π΅ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΠΈ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠΉ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ. Π₯ΠΎΡΡ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΡΠΌΡΠΌ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°, ΠΎΠ½ΠΈ ΠΎΡΡΠ°ΠΆΠ°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΡΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ, ΡΠ»Π΅Π΄ΡΡ Π·Π° Π΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠΎΠΌ ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±ΡΠ΄ΡΡ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΠ»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΡΠ΅Π½Π½ΠΎΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π²Π΅Π·Π΄Ρ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ² ΠΈ Π΄Π°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠ΅ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ.
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² Π΄Π΅ΡΠ°Π»ΡΡ
1 - Π Π΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ·Π±Π΅Π³Π°ΡΡ
ΠΠ΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ gt-next ΠΈΠ»ΠΈ lingo.dev, ΡΠ²Π½ΠΎ Π»ΡΡΡΠ΅ ΠΈΠ·Π±Π΅Π³Π°ΡΡ. ΠΠ½ΠΈ ΡΠΎΡΠ΅ΡΠ°ΡΡ Π² ΡΠ΅Π±Π΅ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΠΊ Π²Π΅Π½Π΄ΠΎΡΡ Ρ Π·Π°Π³ΡΡΠ·Π½Π΅Π½ΠΈΠ΅ΠΌ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°ΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΈΡ
Π²Π½Π΅Π΄ΡΠΈΡΡ, ΠΌΠ½Π΅ ΡΠ°ΠΊ ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΈΡ
ΡΠ°Π±ΠΎΡΠ°ΡΡ - Π½ΠΈ Π½Π° TanStack Start, Π½ΠΈ Π½Π° Next.js.
ΠΡΡΡΠ΅ΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
(General Translation) (gt-next@6.16.5):
- ΠΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²Π΅ΡΠΎΠΌ 110 ΠΠ
gt-nextΠ΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ 440 ΠΠ ΡΠ²Π΅ΡΡ Ρ. Quota Exceeded, please upgrade your plan(ΠΠ²ΠΎΡΠ° ΠΏΡΠ΅Π²ΡΡΠ΅Π½Π°, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ°ΡΠΈΡΠ½ΡΠΉ ΠΏΠ»Π°Π½) ΠΏΡΠΈ ΡΠ°ΠΌΠΎΠΉ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ΅ Ρ General Translation.- ΠΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ; Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΡ
Error: <T> used on the client-side outside of <GTProvider>, ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π±Π°Π³ΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. - ΠΡΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ gt-next Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅:
does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»Π° ΠΊ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΠ»Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΠΉ ΠΈΡΠΏΡΠ°Π²ΠΈΠ» Π΅Π΅ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 24 ΡΠ°ΡΠΎΠ². - ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ ΡΡΡΠ°Π½ΠΈΡ Next.js.
(Lingo.dev) (@lingo.dev/compiler@0.4.0):
- ΠΠ²ΠΎΡΠ° AI ΠΏΡΠ΅Π²ΡΡΠ΅Π½Π°, ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠ±ΠΎΡΠΊΡ - Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½ Π±Π΅Π· ΠΎΠΏΠ»Π°ΡΡ.
- ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΎΠΏΡΡΡΠΈΠ» ΠΏΠΎΡΡΠΈ 40% ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°. ΠΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π²ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ
.mapΠ² ΠΏΠ»ΠΎΡΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΡΡΠΎΠ±Ρ ΡΡΠΎ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ. - ΠΡ CLI ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π±Π΅Π· ΠΏΡΠΈΡΠΈΠ½Ρ.
- ΠΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΄Π°Π»ΡΠ» ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ JSON-ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΌΠΎΠ³Π»ΠΈ ΡΡΠ΅ΡΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ 300 ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ.
2 - ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ
(Wuchale) (wuchale@0.22.11):
ΠΠ΄Π΅Ρ Wuchale ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°, Π½ΠΎ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π΅Π½. Π― ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΈ Π±ΡΠ» Π²ΡΠ½ΡΠΆΠ΄Π΅Π½ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Π΄Π΅ΡΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΡΡΠ½Π°Ρ, ΡΡΠΎ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ Π½Π°ΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ.
(Paraglide) (@inlang/paraglide-js@2.15.1):
Paraglide ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΈΠ½Π½ΠΎΠ²Π°ΡΠΈΠΎΠ½Π½ΡΠΉ, Ρ
ΠΎΡΠΎΡΠΎ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² ΡΡΠΎΠΌ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ΅ ΡΠ°Π·ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ tree-shaking Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π» Π΄Π»Ρ ΠΌΠΎΠΈΡ
Π½Π°ΡΡΡΠΎΠ΅ΠΊ Next.js ΠΈΠ»ΠΈ TanStack Start. ΠΡΠΎΡΠ΅ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈ DX ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ Ρ Π΄ΡΡΠ³ΠΈΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ².
ΠΠΈΡΠ½ΠΎ ΠΌΠ½Π΅ Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ JS-ΡΠ°ΠΉΠ»Ρ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΏΡΡΠ΅ΠΌ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΉ ΡΠΈΡΠΊ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΡΠ»ΠΈΡΠ½ΠΈΡ Π² PR. ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π½Π° Vite, ΡΠ΅ΠΌ Π½Π° Next.js.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ, Paraglide Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, React context) Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ Π΄Π»Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ·Π»Π° ΠΎΠ½ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π»ΠΎΠΊΠ°Π»Ρ ΠΈΠ· localStorage / ΠΊΡΠΊΠΈ ΠΈ Ρ.Π΄. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅Π½ΡΠΆΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΏΠΎ paraglide: ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²Π½Π΅Π΄ΡΡΠ΅Ρ ΠΊΠΎΠ΄ Π² Π²Π°ΡΡ ΠΊΠΎΠ΄ΠΎΠ²ΡΡ Π±Π°Π·Ρ Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ°, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ 'ΡΠ°Π·ΠΌΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ' Π² ΠΎΡΡΠ΅ΡΠ΅ ΠΎ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π²Π΅Π½ 0. ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° - ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π»ΠΎΠ³ΠΈΠΊΡ (Π²ΡΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡΡ ΠΏΡΠΎΡΠΈΠ² ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠ², ΠΊΡΠΊΠΈ ΠΏΡΠΎΡΠΈΠ² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈ Ρ.Π΄.). Π ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ΡΡΠΈΠΌ, Intlayer Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π² ΡΠ±ΠΎΡΠΊΡ, ΡΡΠΎΠ±Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠΈ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ paraglide ΠΈ intlayer ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π² 6-10 ΡΠ°Π· Π»Π΅Π³ΡΠ΅, ΡΠ΅ΠΌ i18next ΠΈΠ»ΠΈ next-intl.
3 - ΠΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ
(Tolgee) (@tolgee/react@7.0.0):
Tolgee ΡΠ΅ΡΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ
ΡΠ°Π½Π΅Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠ½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ Π΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ Π²Π½Π΅Π΄ΡΠΈΡΡ, ΡΠ΅ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. ΠΠ½ Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ ΠΎΡΠ»ΠΎΠ² ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ
ΠΊΠ»ΡΡΠ΅ΠΉ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΎΠ±Π΅ΡΠ½ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Tolgee ΡΠ²ΠΎΠΈΠΌΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ
ΠΊΠ»ΡΡΠ΅ΠΉ.
(Next Intl) (next-intl@4.9.1):
next-intl - ΡΠ°ΠΌΡΠΉ ΠΌΠΎΠ΄Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°ΡΡ AI-Π°Π³Π΅Π½ΡΡ, Π½ΠΎ, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ. ΠΠ°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ Π»Π΅Π³ΠΊΠΎ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΠ΅ΠΊ ΡΠ»ΠΎΠΆΠ½Π°. Π‘ΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ + ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ + ΡΠΈΠΏΠΎΠ² TypeScript ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ. ΠΠ°ΠΊΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΠΆΠ΅Π»ΡΠΉ (~13 ΠΠ Π΄Π»Ρ NextIntlClientProvider + useTranslations, ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π² 2 ΡΠ°Π·Π° Π±ΠΎΠ»ΡΡΠ΅ next-intlayer). next-intl ΡΠ°Π½ΡΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π» ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ ΡΡΡΠ°Π½ΠΈΡ Next.js. ΠΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ setRequestLocale(). ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠΈΠΏΠ° en.json / fr.json, Π½ΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π»ΠΎΠΌΠ°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ en/shared.json / fr/shared.json / es/shared.json.
(Next I18next) (next-i18next@16.0.5):
next-i18next, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π±ΡΠ» ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠ΅ΡΠ²ΡΡ
i18n-ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ JavaScript-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π£ Π½Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΠΎΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°. Π£ Π½Π΅Π³ΠΎ ΡΠ΅ ΠΆΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ, ΡΡΠΎ ΠΈ Ρ next-intl. ΠΠ°ΠΊΠ΅Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΡΠΆΠ΅Π»ΡΠΉ (~18 ΠΠ Π΄Π»Ρ I18nProvider + useTranslation, ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² 3 ΡΠ°Π·Π° ΡΡΠΆΠ΅Π»Π΅Π΅ next-intlayer).
Π€ΠΎΡΠΌΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ: next-intl ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ICU MessageFormat, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ i18next ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ.
(Next International) (next-international@1.3.1):
next-international ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΡΠ°Π΅Ρ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ next-intl ΠΈΠ»ΠΈ next-i18next. ΠΠ½ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ scopedT() Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½, Π½ΠΎ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π½Π΄Π»Π°.
(Lingui) (@lingui/core@5.3.0):
Lingui ΡΠ°ΡΡΠΎ Ρ
Π²Π°Π»ΡΡ. ΠΠΈΡΠ½ΠΎ ΠΌΠ½Π΅ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Ρ lingui extract / lingui compile ΠΏΠΎΠΊΠ°Π·Π°Π»ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ, ΡΠ΅ΠΌ Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ², Π±Π΅Π· ΡΠ²Π½ΡΡ
ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ². Π― ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅ΡΠΈΠ» Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΡΠ°Π΅Ρ AI (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, t(), t'', i18n.t(), <Trans>).
4 - Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ
(Next Translate) (next-translate@3.1.2):
next-translate - ΠΌΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠ°Π²ΠΈΡΡΡ API Π² ΡΡΠΈΠ»Π΅ t(). ΠΠ½ ΡΠ»Π΅Π³Π°Π½ΡΠ΅Π½ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ next-translate-plugin, Π·Π°Π³ΡΡΠΆΠ°Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΡΠ΅ΡΠ΅Π· getStaticProps Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ° Webpack / Turbopack. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΠΌΡΠΉ Π»Π΅Π³ΠΊΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ (~2.5 ΠΠ). Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½, ΠΈΡ
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΡΡΡΠ° Π² ΠΊΠΎΠ½ΡΠΈΠ³Π΅ Ρ
ΠΎΡΠΎΡΠΎ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½ΠΎ ΠΈ ΠΏΡΠΎΡΠ΅ Π² ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ, ΡΠ΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ next-intl ΠΈΠ»ΠΈ next-i18next. Π Π²Π΅ΡΡΠΈΠΈ 3.1.2 Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π»; Next.js ΠΎΡΠΊΠ°ΡΡΠ²Π°Π»ΡΡ ΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Ρ.
(Intlayer) (next-intlayer@8.7.12):
Π― Π½Π΅ Π±ΡΠ΄Ρ Π»ΠΈΡΠ½ΠΎ ΡΡΠ΄ΠΈΡΡ ΠΎ next-intlayer ΡΠ°Π΄ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΡΠ½ΡΠΌ ΠΈ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°. Π ΠΌΠΈΡΠ΅ i18n ΡΠ°ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΠΏΠ°ΡΡΠ΅ΡΠ½Π° const t = useTranslation('xx') + <>{t('xx.xx')}</>.
Π React-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ReactNode, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠΌ. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π»ΠΈΡΠ½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ JavaScript (Ρ
ΠΎΡΡ ΠΎΠ½ΠΈ ΠΏΠΎΡΡΠΈ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½Ρ).
