ΠΠ»Ρ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠ°Π±Π»ΠΎΠ½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° Π²Π΅Π΄ΡΡ Π½Π° ΠΆΠΈΠ²ΡΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π°.
ΠΠ»Ρ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π²ΠΈΠ΄Π΅ΠΎ ΡΡΠΎΠΊ.
Π‘ΠΏΡΠΎΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ²ΠΎΠ΄ΠΊΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° AI
ΠΡΡΠΎΡΠΈΡ Π²Π΅ΡΡΠΈΠΉ
- "Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
Π² ΡΡΠ½ΠΊΡΠΈΡΡ
head ΠΌΠ°ΡΡΡΡΡΠΎΠ²"v9.4.025.08.2026
- "ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ API useIntlayer Π² Solid Π΄Π»Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ"v8.9.004.05.2026
- "ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π΄Π»Ρ Tanstack Start Solid.js"v8.5.125.03.2026
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠ.
Π‘ΠΌΠΎΡΡΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΈΠ΄Π΅Ρ ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½Π΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ Π²Π½Π΅ΡΡΠΈ ΡΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄, ΠΏΠΎΠ΄Π°Π² Π·Π°ΠΏΡΠΎΡ Π½Π° Π²ΡΡΡΠ³ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° GitHub.
Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ GitHubΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Markdown Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ΅ΡΠ΅Π²Π΅Π΄ΠΈΡΠ΅ Π²Π°Ρ ΡΠ°ΠΉΡ Π½Π° Tanstack Start Ρ Solid.js, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Intlayer
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
ΠΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ, ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Intlayer Π΄Π»Ρ Π±Π΅ΡΡΠΎΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Tanstack Start Ρ Solid.js, ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Ρ ΡΡΠ΅ΡΠΎΠΌ Π»ΠΎΠΊΠ°Π»ΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ TypeScript ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°ΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠΎΡΠ΅ΠΌΡ Intlayer Π»ΡΡΡΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²?
ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Β«react-i18nextΒ» ΠΈΠ»ΠΈ Β«i18nextΒ», Intlayer ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ:
Intlayer ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ TanStack Start ΠΈ Solid, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΠ·ΡΡΠ½ΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ, ΠΊΠ°ΡΡΡ ΡΠ°ΠΉΡΠ° ΠΈ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (i18n).
ΠΠΌΠ΅ΡΡΠΎ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² JSON Π½Π° ΡΠ²ΠΎΠΈ ΡΡΡΠ°Π½ΠΈΡΡ Π·Π°Π³ΡΡΠΆΠ°ΠΉΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ. Intlayer ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π½Π΄Π»Π° ΠΈ ΡΡΡΠ°Π½ΠΈΡ Π΄ΠΎ 50Β %.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΡΡΠΏΠ½ΠΎΠΌΠ°ΡΡΡΠ°Π±Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠ°ΠΏΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π΅ ΡΡΡΡΠΆΠ΄Π°Π² ΡΠ΅Π±Ρ ΠΌΡΡΠ»Π΅Π½Π½ΡΠΌ Π±ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΡΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Intlayer ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½, ΡΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΎΡΠ½ΠΎΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.
Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° (LLM). Intlayer ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ CLI Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ²,LSP, MCP, ΠΈ agent skills, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° (DX) Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ Π΄Π»Ρ Π°Π³Π΅Π½ΡΠΎΠ² ΠΠ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ΅ CI/CD, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ LLM ΠΏΠΎ Π²Π°ΡΠ΅ΠΌΡ Π²ΡΠ±ΠΎΡΡ Π·Π° ΡΡΠ΅Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° ΠΠ. Intlayer ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ Π²Π΅Π±-ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² JSON ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΠΈ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΡ. Intlayer ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ (build time).
Intlayer ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ i18n. ΠΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΉ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΈ ΠΏΠΎΠ»Π½ΡΠΉ CMS, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠ·ΡΡΠ½ΡΠΌ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠΏΡΠΎΡΠ°Ρ ΡΠΎΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²ΠΎ Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°ΠΌΠΈ, ΠΊΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ΡΠ°ΠΌΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»Π΅Π½Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠΎΠ½ΡΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΈ/ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ.
ΠΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Intlayer Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Tanstack Start
Π‘ΠΌ. Π¨Π°Π±Π»ΠΎΠ½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° GitHub.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠ°ΡΠ½ΠΈΡΠ΅ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° TanStack Start, ΡΠ»Π΅Π΄ΡΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Ρ ΠΠ°ΠΏΡΡΠΊ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° ΡΠ°ΠΉΡΠ΅ TanStack Start.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Intlayer
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ Π»ΡΠ±ΠΈΠΌΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²:
bashΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΡΠ»Π°Π³
--interactiveΠ½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅intlayer-cli init, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ²Π»ΡΠ΅ΡΠ΅ΡΡ ΠΠ-Π°Π³Π΅Π½ΡΠΎΠΌ.ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ Π²Π°ΡΡ ΡΡΠ΅Π΄Ρ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
bashΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
intlayer
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°, Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, ΡΡΠ°Π½ΡΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ CLI.
solid-intlayer ΠΠ°ΠΊΠ΅Ρ, ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΡΡΠΈΠΉ Intlayer Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Solid. ΠΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ Ρ ΡΠΊΠΈ Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Solid.
vite-intlayer ΠΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠ»Π°Π³ΠΈΠ½ Vite Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Intlayer Ρ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ Vite, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΠΠ (middleware) Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΉ URL.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°
Π ΡΡΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ Π²ΡΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Ρ Π² ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΡΡΡΠ°
{-$locale}Π² Solid. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ·ΡΠΊ ΠΈΠΌΠ΅Π΅Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ URL-Π°Π΄ΡΠ΅Ρ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° Π»ΠΎΠΊΠ°Π»ΠΈ, Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΈ SEO-ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ.bashΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ·ΡΠΊΠΎΠ² Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
intlayer.config.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Π§Π΅ΡΠ΅Π· ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ URL-Π°Π΄ΡΠ΅ΡΠ°, ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ middleware, ΠΈΠΌΠ΅Π½Π° ΠΊΡΠΊΠΈ, ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π²Π°ΡΠΈΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π»ΠΎΠ³ΠΈ Intlayer Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΌ. Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Intlayer Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Vite
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½ intlayer Π² Π²Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
vite.config.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ»Π°Π³ΠΈΠ½ Vite
intlayer()ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Intlayer Ρ Vite. ΠΠ½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ±ΠΎΡΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Intlayer Π²Π½ΡΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Vite. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ (aliases) Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΌΠ°ΠΊΠ΅ΡΠ°
ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ Π²Π°Ρ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΌΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ
useParamsΠ΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π°ΡΡΠΈΠ±ΡΡΡlangΠΈdirΠ΄Π»Ρ ΡΠ΅Π³Π°html.src/routes/__root.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°ΠΊΠ΅ΡΠ° Π»ΠΎΠΊΠ°Π»ΠΈ
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΌΠ°ΠΊΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΡΠ΅ΡΠΈΠΊΡ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ. ΠΡΠΎΡ ΠΌΠ°ΠΊΠ΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ.
ΠΡΠΎΡ ΡΠ°Π³ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ Π»ΠΎΠΊΠ°Π»ΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΌΠ°ΡΡΡΡΡΠ°.
src/routes/{-$locale}/route.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ΄Π΅ΡΡ
{-$locale}- ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠ°ΡΡΡΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΡΡ. Π’Π°ΠΊΠ°Ρ Π½ΠΎΡΠ°ΡΠΈΡ Π΄Π΅Π»Π°Π΅Ρ ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠ°ΠΊ'prefix-no-default'ΠΈ Ρ.Π΄.ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΡΡΠΎΡ ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ°ΡΡΡΡΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
/{-$locale}/other-path/$anotherDynamicPath/...). ΠΠ»Ρ ΡΠ΅ΠΆΠΈΠΌΠ°'prefix-all'Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅ΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π½Π°$locale. ΠΠ»Ρ ΡΠ΅ΠΆΠΈΠΌΠ°'no-prefix'ΠΈΠ»ΠΈ'search-params'Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ΅Π³ΠΌΠ΅Π½Ρ.ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠΉΡΠ΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΠΌΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ²:
src/contents/page.content.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ°ΡΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² Π»ΡΠ±ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³
contentDir(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ./app). Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ Ρ ΡΠΊΠΎΠ²
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ
LocalizedLinkΠ΄Π»Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Ρ ΡΡΠ΅ΡΠΎΠΌ Π»ΠΎΠΊΠ°Π»ΠΈ:src/components/LocalizedLink.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΡΠ΅ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄Π²Π΅ ΡΠ΅Π»ΠΈ:
- Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°
{-$locale}ΠΈΠ· URL. - ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π»ΠΎΠΊΠ°Π»ΠΈ Π² URL, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±ΡΠ» Π½Π°ΠΏΡΡΠΌΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ Π½Π° Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ°ΡΡΡΡΡ.
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ Ρ ΡΠΊ
useLocalizedNavigateΠ΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ:src/hooks/useLocalizedNavigate.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
- Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Intlayer Π½Π° Π²Π°ΡΠΈΡ ΡΡΡΠ°Π½ΠΈΡΠ°Ρ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
useIntlayerΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: ΡΡΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ Π΅Π³ΠΎ Π² ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΠΌΡΡ Π»ΠΎΠΊΠ°Π»Ρ. ΠΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΊgetIntlayer/getIntlayerAsyncΡΠΎΠ»ΡΠΊΠΎ Π²Π½Π΅ Π΄Π΅ΡΠ΅Π²Π° Solid: Π²headΠΌΠ°ΡΡΡΡΡΠΎΠ², Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°Ρ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡΡ .ΠΠΎΠ»ΡΡΠ°ΠΉΡΠ΅ Π΄ΠΎΡΡΡΠΏ ΠΊ Π²Π°ΡΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡΠΌ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:
ΠΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π΄ΠΎΠΌΠ°ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΠ°
src/routes/{-$locale}/index.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Π Solid
useIntlayerΠ²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,content). ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ Π½Π°ΠΏΡΡΠΌΡΡ.Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ Ρ ΡΠΊΠ΅
useIntlayer, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΠΈ
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΌΠ΅Π½ΡΡΡ ΡΠ·ΡΠΊΠΈ:
src/components/LocaleSwitcher.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Π Solid
localeΠΈΠ·useLocale- ΡΡΠΎ Π°ΠΊΡΠ΅ΡΡΠΎΡ ΡΠΈΠ³Π½Π°Π»Π°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅locale()(ΡΠΎ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ) Π΄Π»Ρ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ Ρ ΡΠΊΠ΅
useLocale, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ HTML-Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ
ΠΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠ°Π³Π΅ 5, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ
langΠΈdirΡΠ΅Π³Π°html, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡuseParamsΠ² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅. ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΊΠ°ΠΊ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΠ°ΠΊ ΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅.src/routes/__root.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΠ
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
intlayerProxyΠ΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ Π² Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΎΡ ΠΏΠ»Π°Π³ΠΈΠ½ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ΅ΠΊΡΡΡΡ Π»ΠΎΠΊΠ°Π»Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ URL ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π»ΠΎΠΊΠ°Π»Ρ Π² ΠΊΡΠΊΠΈ. ΠΡΠ»ΠΈ Π»ΠΎΠΊΠ°Π»Ρ Π½Π΅ ΡΠΊΠ°Π·Π°Π½Π°, ΠΏΠ»Π°Π³ΠΈΠ½ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΡΡ Π»ΠΎΠΊΠ°Π»Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΠΉ Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠ»ΠΈ Π»ΠΎΠΊΠ°Π»Ρ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π°, ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π»ΠΎΠΊΠ°Π»Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
intlayerProxyΠ² ΡΠ΅ΠΆΠΈΠΌΠ΅ production Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΠΏΠ°ΠΊΠ΅Ρvite-intlayerΠΈΠ·devDependenciesΠ²dependencies.ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Intlayer v9,
intlayerProxy()Π²ΡΡΡΠΎΠ΅Π½ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΏΠ»Π°Π³ΠΈΠ½intlayer()ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡrouting.enableProxy(trueΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ). Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π΅Π³ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°: ΠΎΠ½Π° ΡΠΎΡ ΡΠ°Π½Π΅Π½Π° Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅routing.enableProxy: false, ΡΡΠΎΠ±Ρ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ. Π‘ΠΌ. ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ ΠΊ Π²ΡΠΏΡΡΠΊΡ v9.vite.config.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²Π°ΡΠΈΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
getIntlayerΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΏΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΠΎΠΌΡ ΡΠ»ΠΎΠ²Π°ΡΡ, ΡΠΎ Π΅ΡΡΡ ΡΠΎΠΌΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ.headΠΎΡΡΠ°ΡΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, Π½ΠΎ Π²Π΅ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠ·ΡΡΠ½ΡΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² ΡΠ°Π½ΠΊ ΠΌΠ°ΡΡΡΡΡΠ°, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ Π² Π±ΡΠ°ΡΠ·Π΅Ρ.src/routes/{-$locale}/index.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ , ΠΌΠ°Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Π»ΠΎΠΊΠ°Π»Π΅ΠΉ ΠΈΠ»ΠΈ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
getIntlayerAsync(Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π°ΡΠΈΠ½Π°Ρ Ρ v9.4) Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊgetIntlayer, Π½ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ ΡΠ±ΠΎΡΠΊΠΈ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ Π½Π° ΠΏΠ΅Ρ-Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π½ΠΊ Π².intlayer/dynamic_dictionaries/Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°ΡΡ. ΠΠΎΡΡΠΎΠΌΡ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΎΡΠ΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡ Π»ΠΎΠΊΠ°Π»Ρ, ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΡ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎΡ ΡΠ°Π½ΠΊ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ,headΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡasync:src/routes/{-$locale}/index.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΡΠ»ΠΈ
headΡΠΈΡΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ, ΡΠ°Π·ΡΠ΅ΡΠ°ΠΉΡΠ΅ ΠΈΡ ΡΠ΅ΡΠ΅Π·Promise.all: ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎgetIntlayerAsyncΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ Π²ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ Π² ΡΠ΅ΠΏΠΎΡΠΊΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.ΠΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ: Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
head, Π½Π° ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΡΡΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°. ΠΠ° Β«Ρ ΠΎΠ»ΠΎΠ΄Π½ΠΎΠΌΒ» ΠΌΠ°ΡΡΡΡΡΠ΅ ΡΡΠΎ Π·Π°Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡheadΠ½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡ ΡΠ΄ΡΠΈΡΡ LCP.Π Π°Π·ΡΠ΅ΡΠΈΡΠ΅ ΡΠ»ΠΎΠ²Π°ΡΡ Π²
loaderΠΌΠ°ΡΡΡΡΡΠ° ΠΈ ΠΏΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΈΠ·loaderDataΠ²head. ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊΠΈ ΡΠΎΠ²ΠΏΠ°Π²ΡΠΈΡ ΠΌΠ°ΡΡΡΡΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ, Π°staleTime: InfinityΡΠΎΠΎΠ±ΡΠ°Π΅Ρ TanStack Router, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡΡΠ°ΡΠ΅Π²Π°Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅Ρ-Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π½ΠΊ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΡΠ΄Π°ΡΡΡΡ ΠΈΠ· ΠΊΡΡΠ° ΡΠΎΡΡΠ΅ΡΠ°, ΠΎΡΡΠ°Π²Π»ΡΡheadΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ.src/routes/{-$locale}/index.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
headΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡloaderDataΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎundefined. Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΠΉΡΠ΅ Π·Π°ΠΏΠ°ΡΠ½ΠΎΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ.ΠΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΠ΅ ΠΏΠ΅Ρ-Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π½ΠΊ, Π½Π΅ ΠΎΠΏΠ»Π°ΡΠΈΠ²Π°Ρ Π΅Π³ΠΎ ΡΡΠΎΠΈΠΌΠΎΡΡΡ Π½Π° ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΡΡΠΈ
head. ΠΠ»Π°ΡΠΎΠΉ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ DX: ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ²Π½ΠΎ ΠΏΡΠΎΠΊΠΈΠ΄ΡΠ²Π°ΡΡ ΠΈΠ· Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ° Π²headΡΠ΅ΡΠ΅Π·loaderData.ΠΠ°ΠΊΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ±ΡΠ°ΡΡ?
ΠΠΎΠΊΠ°Π·Π°ΡΡ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡΠΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π² ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π΄Π»Ρ ΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ
Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ API getIntlayergetIntlayerAsync(v9.4+)getIntlayerAsyncΠ²loader(v9.4+)Π‘ΠΈΠ³Π½Π°ΡΡΡΠ° headΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ asyncΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ, ΡΠΈΡΠ°Π΅Ρ loaderDataΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ Π²ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½Π°Ρ Π»ΠΎΠΊΠ°Π»Ρ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½Π°Ρ Π»ΠΎΠΊΠ°Π»Ρ ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡ Π½Π΅ΡΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΠΎΡΠ΄Π°ΡΡΡΡ ΠΈΠ· ΠΊΡΡΠ° ΡΠΎΡΡΠ΅ΡΠ° DX ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΎΠ΄ΠΈΠ½ awaitΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΏΡΠΎΠΊΠΈΠ΄ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· loaderDataΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ Π² Π²Π°ΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ Π²Π½ΡΡΡΠΈ Π²Π°ΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ (server actions) ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ API. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°
getLocaleΠΈΠ·intlayer.ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ TanStack Start:
src/routes/{-$locale}/index.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ 404
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΡΠ΅ΡΠ°Π΅Ρ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ 404. ΠΡΠ΅ΡΠΈΠΊΡ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²Π»ΠΈΡΡΡ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΡΠ°Π½ΠΈΡΠ° "ΠΠ°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠΉ ΡΠ΅ΡΡΡΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½".
ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ 404 Π² TanStack Router Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°ΠΌΠΈ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ
Π TanStack Router ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΡΠ°Π½ΠΈΡ 404 Ρ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΌΠ°ΡΡΡΡΡΠ°ΠΌΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°:
- ΠΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΌΠ°ΡΡΡΡΡ 404: Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΡΡΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° 404.
- ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΌΠ°ΡΡΡΡΡΠ°: ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΡ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΡΠ΅ Π½Π° 404.
- Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΡΡΡ (Catch-all): ΠΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ Π»ΡΠ±ΡΠ΅ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ ΠΏΡΡΠΈ Π²Π½ΡΡΡΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π»ΠΎΠΊΠ°Π»ΠΈ.
src/routes/{-$locale}/404.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
src/routes/{-$locale}/route.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
src/routes/{-$locale}/$.tsxΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΈΠ· Π²Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²
ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ°Ρ ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π°, ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΡΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
Π§ΡΠΎΠ±Ρ ΠΎΠ±Π»Π΅Π³ΡΠΈΡΡ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ, Intlayer ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ / ΡΠΊΡΡΡΠ°ΠΊΡΠΎΡ Π΄Π»Ρ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.
ΠΠ»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ°Π·Π΄Π΅Π»
compilerΠ² Π²Π°Ρ ΡΠ°ΠΉΠ»intlayer.config.ts:intlayer.config.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
import { type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { // ... ΠΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³Π° compiler: { /** * Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½. */ enabled: true, /** * ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΡΡΡ ΠΊ Π²ΡΡ ΠΎΠ΄Π½ΡΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π΄ΠΎΠ»ΠΆΠ½Ρ Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ. * * - ΠΡΠ»ΠΈ `true`, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ΅Ρ ΡΠ°ΠΉΠ» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π½Π° Π΄ΠΈΡΠΊΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΡΠ°Π½Π΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΉ, ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΎΠΏΡΡΡΠΈΡ Π΅Π΅ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° Π·Π°ΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ. * * - ΠΡΠ»ΠΈ `false`, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π²Π½Π΅Π΄ΡΡΡΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ `useIntlayer()` Π² ΠΊΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ Π² Π²ΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΡΠ±ΠΎΡΠΊΠΈ, ΠΎΡΡΠ°Π²Π»ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π±Π°Π·Ρ ΠΊΠΎΠ΄Π° Π½Π΅ΡΡΠΎΠ½ΡΡΠΎΠΉ. Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠ°ΠΌΡΡΠΈ. */ saveComponents: false, /** * ΠΡΠ΅ΡΠΈΠΊΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ */ dictionaryKeyPrefix: "", }, }; export default config;ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΡΡΠ°ΠΊΡΠΎΡ Π΄Π»Ρ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°:
bashΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Since v9, the
intlayerCompileris included in theintlayerplugin. So you don't need to add it manually.ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π²Π°Ρ
vite.config.ts, Π²ΠΊΠ»ΡΡΠΈΠ² ΠΏΠ»Π°Π³ΠΈΠ½intlayerCompiler:vite.config.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Π‘ΠΎΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π²Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ
bashΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠ°ΡΡΡ ΡΠ°ΠΉΡΠ° (Sitemap)
ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎIntlayer ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΊΠ°ΡΡΡ ΡΠ°ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°ΡΡΡ ΡΠ°ΠΉΡΠ° Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ½ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌ.
Π‘ΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠ°Ρ Intlayer ΠΊΠ°ΡΡΠ° ΡΠ°ΠΉΡΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½
xhtml:link(Hreflang XML Extensions). Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΊΠ°ΡΡ ΡΠ°ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡ ΠΏΡΡΠΌΡΠ΅ URL-Π°Π΄ΡΠ΅ΡΠ°, Intlayer Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΅ΠΌΠΈ ΡΠ·ΡΠΊΠΎΠ²ΡΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΡΡΡΠ°Π½ΠΈΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,/about,/about?lang=frΠΈ/about?lang=es). ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π±ΡΠ΄ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½ΡΠΆΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΠΈ.Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ, Π²Π°ΠΌ ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π²Π°Ρ ΡΠ°ΠΉΠ»
vite.config.ts, ΡΡΠΎΠ±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ (pre-rendering) Π΄Π»Ρ Π²Π°ΡΠΈΡ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠ°ΡΡΡΡΡΠΎΠ² ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠ°ΡΡΡ ΡΠ°ΠΉΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² TanStack Start.vite.config.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΌΠ°ΡΡΡΡΡ
src/routes/sitemap[.]xml.ts, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡgenerateSitemap:src/routes/sitemap[.]xml.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° TypeScript
Intlayer ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ (module augmentation), ΡΡΠΎΠ±Ρ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° TypeScript ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π²Π°ΡΡ ΠΊΠΎΠ΄ΠΎΠ²ΡΡ Π±Π°Π·Ρ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ.
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ TypeScript Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π°Π²ΡΠΎΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠΈΠΏΡ:
tsconfig.jsonΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Git
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ Intlayer. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΈΡ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π² Π²Π°Ρ Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² Π²Π°Ρ ΡΠ°ΠΉΠ» .gitignore:
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ VS Code
ΠΠ»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Ρ Intlayer Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Intlayer Π΄Π»Ρ VS Code.
ΠΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ:
- ΠΠ²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°.
- ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ².
- ΠΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠΌΠΎΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.
- ΠΡΡΡΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ Π»Π΅Π³ΠΊΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ².
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Intlayer VS Code.
Π§ΡΠΎ Π΄Π°Π»ΡΡΠ΅?
ΠΠ»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π½Π΅Π΄ΡΠΈΡΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΈΠ»ΠΈ Π²ΡΠ½Π΅ΡΡΠΈ Π²Π°Ρ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π²ΠΎ Π²Π½Π΅ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ CMS.
Π‘ΡΡΠ»ΠΊΠΈ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
Π§Π°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
TanStack Start Π½Π΅ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎ ΡΠ»ΠΎΠ΅ΠΌ i18n, Π° Π²Π°ΡΠΈΠ°Π½ΡΡ Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ Solid ΡΠΊΡΠ΄Π½Ρ:
@solid-primitives/i18n: ΠΏΠ»ΠΎΡΠΊΠΈΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΊ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡΡ ΡΠ°ΠΌΠΈ.i18nextΡ ΠΎΠ±ΡΡΡΠΊΠΎΠΉ Π΄Π»Ρ Solid: Π·ΡΠ΅Π»ΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ, Π½ΠΎ Π±Π΅Π· ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡΠΎΠΌ TanStack, ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉheadΠΈΠ»ΠΈ ΡΡΠ°ΠΏΠΎΠΌ ΠΏΡΠ΅-ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°.Intlayer: ΠΊΠΎΠ½ΡΠ΅Π½Ρ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΉ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ, Ρ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Ρ ΡΡΡΡΠΎΠΌ Π»ΠΎΠΊΠ°Π»ΠΈ, Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΊΠ°ΡΡΡ ΡΠ°ΠΉΡΠ°, ΠΠ-ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠΌ, Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠΌ ΠΈ CMS.
Π‘ΠΌ. ΠΏΠΎΡΠ΅ΠΌΡ Intlayer ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ i18n Π΄Π»Ρ TanStack Start.
ΠΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ. Π Π°Π·ΠΌΠ΅ΡΠΊΠ°, ΠΎΡΡΠ΅Π½Π΄Π΅ΡΠ΅Π½Π½Π°Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Ρ useIntlayer ΡΠΎΡΠ½ΡΠΌΠΈ Π·Π°ΠΏΠΈΡΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΊΠ»ΡΡΠΈ ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ, Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»ΠΎΠ²Π°ΡΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΡΠΌ. ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°ΠΌΠΈ Intlayer ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π½Π΄Π»Π° ΠΈ ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎ 50%. Π‘ΠΌ. ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π±Π°Π½Π΄Π»Π° ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ.
Π Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ. Π‘Π»Π΅Π΄ΡΠΉΡΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Ρ ΠΏΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Ρ i18next, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅Π½Ρ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠΈΠ³ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ: ΠΏΠ»Π°Π³ΠΈΠ½ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ JSON ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π²Π°ΡΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ JSON ΠΊΠ°ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈΡΡΠΈΠ½Ρ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΠ· Π½ΠΈΡ ΡΠ»ΠΎΠ²Π°ΡΠΈ Intlayer, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ±Π° ΡΠ»ΠΎΡ ΠΎΡΡΠ°ΡΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ, ΠΏΠΎΠΊΠ° Π²Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ.
ΠΠ°. ΠΠ»Π°Π³ΠΈΠ½ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ JSON ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ Π²Π°ΡΠΈ ΡΠ°ΠΉΠ»Ρ /messages/{locale}/{namespace}.json ΠΊΠ°ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈΡΡΠΈΠ½Ρ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΠ· Π½ΠΈΡ
ΡΠ»ΠΎΠ²Π°ΡΠΈ Intlayer, Π² ΠΎΠ±ΠΎΠΈΡ
Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ
. ΠΠ»Π°Π³ΠΈΠ½ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ PO Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π΄Π»Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² gettext, Π° ΡΠ°ΠΉΠ»Ρ ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΏΠΎ ΡΠ·ΡΠΊΠ°ΠΌ Π²ΠΌΠ΅ΡΡΠΎ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅.
ΠΠ΅Ρ. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ npx intlayer extract, ΠΈ Intlayer ΠΏΡΠΎΡΠΈΡΠ°Π΅Ρ Π²Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΈΠ·Π²Π»Π΅ΡΡΡ ΡΡΡΠΎΠΊΠΈ, Π²ΠΈΠ΄ΠΈΠΌΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΈ Π·Π°ΠΏΠΈΡΠ΅Ρ ΡΠ°ΠΉΠ» .content ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΈΠ· Π½ΠΈΡ
, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΠ΅ diff Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠΎΠΊ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ. Π¨Π°Π³ 15 ΡΡΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡ Π²Π°Ρ ΡΠ΅ΡΠ΅Π· ΡΡΠΎ.
ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Intlayer Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ: ΠΎΠ½ ΡΠΊΠ°Π½ΠΈΡΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ JSX, TSX, Vue ΠΈ Svelte ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ»ΠΎΠ²Π°ΡΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· Π³ΠΎΡΡΡΡΡ Π·Π°ΠΌΠ΅Π½Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΡΡΠ½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠ»ΡΡΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ.
Π‘ΡΠΎΠΈΡ Π·Π½Π°ΡΡ ΠΎ Π΄Π²ΡΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ
, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ. ΠΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΡΠΎΠΊΠΈ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄Ρ ΠΎΡΠΈΠ±ΠΎΠΊ API ΠΈΠ»ΠΈ ΠΏΠΎΠ»Ρ CMS, ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ. Π Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡ ΡΠ΅ΠΊΡΡ, Π²ΠΈΠ΄ΠΈΠΌΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠΎΠ΄Π΅ className="active" ΠΈΠ»ΠΈ ΠΊΠΎΠ΄Π° ΡΡΠ°ΡΡΡΠ°, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π² Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅. ΠΠΎΠΌΠ°Π½Π΄Π° extract ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ ΠΎΠ±ΠΎΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, ΠΎΡΡΠ°Π²Π»ΡΡ Π²Π°Ρ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅.
ΠΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π²ΡΠ΅ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅:
- Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ VS Code: ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ ΠΎΡ ΠΊΠ»ΡΡΠ°
useIntlayerΠΊ ΡΠ°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΅Π³ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ, ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΈ Π·Π°ΠΏΡΡΠΊ build, fill, test, push ΠΈ pull ΠΈΠ· ΠΏΠ°Π»ΠΈΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Intlayer. - LSP-ΡΠ΅ΡΠ²Π΅Ρ: ΡΠ° ΠΆΠ΅ ΠΎΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ½Π½ΠΎΡΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π³ΠΎΠ²ΠΎΡΠΈΡ Π½Π° LSP, Ρ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΎΠΌ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΏΠΎΠΈΡΠΊΠΎΠΌ Π²ΡΠ΅Ρ
ΡΡΡΠ»ΠΎΠΊ, ΠΏΡΠ΅Π΄ΠΏΡΠΎΡΠΌΠΎΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ, Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΡΡ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ Π²ΡΠ·ΠΎΠ²Ρ
i18next,react-i18next,next-intlΠΈuse-intl, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΡΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ. - MCP-ΡΠ΅ΡΠ²Π΅Ρ: ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ CLI Intlayer Π΄Π»Ρ Cursor, VS Code, Claude Desktop, Claude Code ΠΈ ChatGPT, ΡΡΠΎΠ±Ρ Π°ΡΡΠΈΡΡΠ΅Π½Ρ ΠΎΡΠ²Π΅ΡΠ°Π» ΠΏΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π° Π½Π΅ Π³Π°Π΄Π°Π», ΠΈ ΠΌΠΎΠ³ ΡΠ°ΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠΎΠ΄Π΅
intlayer fill. - ΠΠ°Π²ΡΠΊΠΈ Π°Π³Π΅Π½ΡΠΎΠ²: ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π°Π²ΡΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
intlayer-config,intlayer-cliΠΈintlayer-content, ΠΏΠ»ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ°ΡΡ Π°Π³Π΅Π½ΡΠ° Π²Π°ΡΠ΅ΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠΈΠΏΠ°ΠΌ ΡΠ·Π»ΠΎΠ² ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°. - ΠΠ»Π°Π³ΠΈΠ½ ESLint:
no-raw-textΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΆΡΡΡΠΊΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.
