ΠΠ»Ρ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠ°Π±Π»ΠΎΠ½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° Π²Π΅Π΄ΡΡ Π½Π° ΠΆΠΈΠ²ΡΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π°.
Π‘ΠΏΡΠΎΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ²ΠΎΠ΄ΠΊΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° AI
ΠΡΡΠΎΡΠΈΡ Π²Π΅ΡΡΠΈΠΉ
- "ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ API useIntlayer Π² Solid Π΄Π»Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ"v8.9.004.05.2026
- "ΠΠ°ΡΠ°Π»ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ"v8.4.1023.03.2026
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠ.
Π‘ΠΌΠΎΡΡΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΈΠ΄Π΅Ρ ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½Π΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ Π²Π½Π΅ΡΡΠΈ ΡΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄, ΠΏΠΎΠ΄Π°Π² Π·Π°ΠΏΡΠΎΡ Π½Π° Π²ΡΡΡΠ³ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° GitHub.
Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ GitHubΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Markdown Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ΅ΡΠ΅Π²Π΅Π΄ΠΈΡΠ΅ Π²Π°Ρ ΡΠ°ΠΉΡ Π½Π° Vite ΠΈ Vanilla JS Ρ ΠΏΠΎΠΌΠΎΡΡΡ Intlayer | ΠΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΡ (i18n)
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
ΠΠΎΡΠ΅ΠΌΡ Intlayer Π»ΡΡΡΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²?
ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ i18next ΠΈΠ»ΠΈ i18n.js, Intlayer β ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ:
Intlayer ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Vite, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ΅ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ TypeScript ΠΈ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (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 Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π° Vite ΠΈ Vanilla JS
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ npm:
bashΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΡΠ»Π°Π³
--interactiveΠ½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅intlayer-cli init, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ²Π»ΡΠ΅ΡΠ΅ΡΡ ΠΠ-Π°Π³Π΅Π½ΡΠΎΠΌ.ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ Π²Π°ΡΡ ΡΡΠ΅Π΄Ρ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
bashΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
intlayer ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°, ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, ΡΡΠ°Π½ΡΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ CLI.
vanilla-intlayer ΠΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Intlayer Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠΈΡΡΠΎΠΌ JavaScript / TypeScript. ΠΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΈΠ½Π³Π»ΡΠΎΠ½ pub/sub (
IntlayerClient) ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΠ»Π±ΡΠΊΠΎΠ² (useIntlayer,useLocaleΠΈ Ρ. Π΄.), ΡΡΠΎΠ±Ρ Π»ΡΠ±Π°Ρ ΡΠ°ΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³Π»Π° ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ° Π±Π΅Π· Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ UI-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°.vite-intlayer ΠΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠ»Π°Π³ΠΈΠ½ Vite Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Intlayer Ρ Π±Π°Π½Π΄Π»Π΅ΡΠΎΠΌ Vite, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊ (middleware) Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ URL.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ·ΡΠΊΠΎΠ² Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
intlayer.config.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
import { Locales, type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // ΠΠ°ΡΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ], defaultLocale: Locales.ENGLISH, }, }; export default config;Π§Π΅ΡΠ΅Π· ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ URL, ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠ°, ΠΈΠΌΠ΅Π½Π° ΠΊΡΠΊΠΈ, ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π²Π°ΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π»ΠΎΠ³ΠΈ Intlayer Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΌ. Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Intlayer Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Vite
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½ intlayer Π² Π²Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
vite.config.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
import { defineConfig } from "vite"; import { intlayer } from "vite-intlayer"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [ intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api"), }, }), ], });ΠΠ»Π°Π³ΠΈΠ½ Vite
intlayer()ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Intlayer Ρ Vite. ΠΠ½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ±ΠΎΡΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Intlayer Π²Π½ΡΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Vite. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ (aliases) Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Intlayer Π² ΡΠΎΡΠΊΠ΅ Π²Ρ ΠΎΠ΄Π°
ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅
installIntlayer()ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ΠΎΠΌ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, ΡΡΠΎΠ±Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠΈΠ½Π³Π»ΡΠΎΠ½ ΡΠ·ΡΠΊΠ° Π±ΡΠ» Π³ΠΎΡΠΎΠ².src/main.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΡΠ»ΠΈ Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
md()(Markdown), ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π½Π΄Π΅ΡΠ΅Ρ ΠΌΠ°ΠΊΡΠ΄Π°ΡΠ½Π°:src/main.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠΉΡΠ΅ ΠΈΠΌΠΈ:
src/app.content.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
import { insert, t, type Dictionary } from "intlayer"; const appContent = { key: "app", content: { title: "Vite + Vanilla", viteLogoLabel: t({ en: "Vite Logo", fr: "Logo Vite", es: "Logo Vite", }), count: insert( t({ en: "count is {{count}}", fr: "le compte est {{count}}", es: "el recuento es {{count}}", }) ), readTheDocs: t({ en: "Click on the Vite logo to learn more", fr: "Cliquez sur le logo Vite pour en savoir plus", es: "ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π½Π° Π»ΠΎΠ³ΠΎΡΠΈΠΏ Vite, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅", }), }, } satisfies Dictionary; export default appContent;ΠΠ°ΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² Π»ΡΠ±ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³
contentDir(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ./src) ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΌ. Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Intlayer Π² Π²Π°ΡΠ΅ΠΌ JavaScript
vanilla-intlayerΠΏΠΎΠ²ΡΠΎΡΡΠ΅Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ½ΡΠΉ APIreact-intlayer:useIntlayer(key, locale?)Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π½Π°ΠΏΡΡΠΌΡΡ. ΠΠΎΠ±Π°Π²ΡΡΠ΅.onChange()ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ° - ΡΡΠΎ ΡΠ²Π½ΡΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ ΡΠ΅ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° Π² React.src/main.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ ΠΊΠ°ΠΊ ΠΊ ΡΡΡΠΎΠΊΠ°ΠΌ, ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Ρ ΠΈΡ Π²
String(), ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄toString()ΡΠ·Π»Π° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π½ΡΠΉ ΡΠ΅ΠΊΡΡ.ΠΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ HTML-Π°ΡΡΠΈΠ±ΡΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
alt,aria-label), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅.valueΠ½Π°ΠΏΡΡΠΌΡΡ:typescriptΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ§ΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ·ΡΠΊ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ
setLocale, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡuseLocale.src/locale-switcher.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Markdown ΠΈ HTML
ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎIntlayer ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
md()ΠΈhtml(). Π ΡΠΈΡΡΠΎΠΌ JS ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ HTML ΡΠ΅ΡΠ΅Π·innerHTML.ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈ Π²ΡΡΠ°Π²ΠΊΠ° HTML:
src/main.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
TIP String(content.editNote)Π²ΡΠ·ΡΠ²Π°Π΅ΡtoString()Π΄Π»ΡIntlayerNode, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ Markdown. ΠΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ Π΅Ρ Π²compileMarkdown, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ HTML-ΡΡΡΠΎΠΊΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π·innerHTML.WARNING ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
innerHTMLΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π΄ΠΎΠ²Π΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°. ΠΡΠ»ΠΈ ΠΌΠ°ΠΊΡΠ΄Π°ΡΠ½ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΈΠ· ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°, ΡΠ½Π°ΡΠ°Π»Π° ΠΎΡΠΈΡΡΠΈΡΠ΅ Π΅Π³ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ DOMPurify). ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅Π½Π΄Π΅ΡΠ΅Ρ Ρ ΠΎΡΠΈΡΡΠΊΠΎΠΉ:typescriptΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ Π² Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° (ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ SEO), Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
intlayerProxyΠ² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Vite Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°.Π‘Π½Π°ΡΠ°Π»Π° Π΄ΠΎΠ±Π°Π²ΡΡΠ΅
intlayerProxyΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Vite:ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
intlayerProxyΠ² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡvite-intlayerΠΈΠ·devDependenciesΠ²dependencies.ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Intlayer v9,
intlayerProxy()Π²ΡΡΡΠΎΠ΅Π½ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΏΠ»Π°Π³ΠΈΠ½intlayer()ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΠΈΡrouting.enableProxy(trueΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ). ΠΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½Π° β ΠΎΠ½Π° ΡΠΎΡ ΡΠ°Π½Π΅Π½Π° Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΠΈ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅routing.enableProxy: falseΠ΄Π»Ρ ΠΎΡΠΊΠ°Π·Π°. Π‘ΠΌ. Π·Π°ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠΏΡΡΠΊΠ° v9.vite.config.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
import { defineConfig } from "vite"; import { intlayer } from "vite-intlayer"; export default defineConfig({ plugins: [ intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api"), }, }), ], });ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ URL ΠΏΡΠΈ ΡΠΌΠ΅Π½Π΅ ΡΠ·ΡΠΊΠ°
ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ§ΡΠΎΠ±Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ URL Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΠΏΡΠΈ ΡΠΌΠ΅Π½Π΅ ΡΠ·ΡΠΊΠ°, Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅
useRewriteURL()ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Intlayer:src/main.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠ·ΡΠΊΠ° ΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° HTML
ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΠ±Π½ΠΎΠ²Π»ΡΠΉΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ
langΠΈdirΡΠ΅Π³Π°<html>Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΠ·ΡΠΊΠΎΠΌ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΈ SEO.src/main.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ ΠΏΠΎ ΡΠ·ΡΠΊΠ°ΠΌ
ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΠ»ΠΎΠ²Π°ΡΠΈ ΠΏΠΎ ΡΠ·ΡΠΊΠ°ΠΌ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ°Π½ΠΊΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
useDictionaryDynamicΠ²ΠΌΠ΅ΡΡΠ΅ Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌimport()ΠΎΡ Vite:src/app.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ°Π½Π΄Π» ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΡ ΡΠ·ΡΠΊ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ, ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΡΡΠΈΡΡΠ΅ΡΡΡ - ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° ΡΠΎΡ ΠΆΠ΅ ΡΠ·ΡΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ.
ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΈΠ· Π²Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²
ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π°, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
Π§ΡΠΎΠ±Ρ ΠΎΠ±Π»Π΅Π³ΡΠΈΡΡ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ, Intlayer ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ / ΡΠΊΡΡΡΠ°ΠΊΡΠΎΡ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π²Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.
Π§ΡΠΎΠ±Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΅Π³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°Π·Π΄Π΅Π»
compilerΠ² ΡΠ°ΠΉΠ»intlayer.config.ts:intlayer.config.tsΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΡΡΠ°ΠΊΡΠΎΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π²Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ
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 ΠΈ robots.txt (Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π½Π° ΡΠ±ΠΎΡΠΊΠ΅)
Intlayer ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ generateSitemap ΠΈ getMultilingualUrls - ΡΡΠΈΠ»ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΡΠΌΠΈΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠ·ΡΡΠ½ΡΠ΅ sitemap.xml ΠΈ robots.txt Π΄Π»Ρ ΠΊΡΠ°ΡΠ»Π΅ΡΠΎΠ² ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΈΡ
Π² public/. ΠΠ±ΡΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Node-ΡΠΊΡΠΈΠΏΡ Π΄ΠΎ Vite (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, npm-Ρ
ΡΠΊΠΈ predev / prebuild).
Sitemap
ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡ sitemap ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½ΡΠΆΠ½ΡΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½xhtml:link(hreflang). ΠΠΌΠ΅ΡΡΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° URL Intlayer ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡΡ Π² ΠΎΠ±Π΅ ΡΡΠΎΡΠΎΠ½Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ/about,/fr/aboutΠΈΠ»ΠΈ/about?lang=frΠ² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΆΠΈΠΌΠ° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ).
Robots.txt
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ getMultilingualUrls, ΡΡΠΎΠ±Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° Disallow ΠΏΠΎΠΊΡΡΠ²Π°Π»ΠΈ Π²ΡΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΡΡΠ΅ΠΉ.
1. Π€Π°ΠΉΠ» generate-seo.mjs Π² ΠΊΠΎΡΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ°ΠΊΠ΅Ρ intlayer Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½. ΠΠ»Ρ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π° Π·Π°Π΄Π°ΠΉΡΠ΅ SITE_URL Π² ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² CI).
ΠΠ»Ρ Node ESM ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎgenerate-seo.mjs. ΠΠ»Ρgenerate-seo.jsΡΠΊΠ°ΠΆΠΈΡΠ΅"type": "module"Π²package.jsonΠΈΠ»ΠΈ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ESM ΠΈΠ½Π°ΡΠ΅.
2. ΠΠ°ΠΏΡΡΠΊ ΡΠΊΡΠΈΠΏΡΠ° Π΄ΠΎ Vite
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠ΄ΡΡΡΠΎΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ pnpm ΠΈΠ»ΠΈ yarn. Π‘ΠΊΡΠΈΠΏΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΠ· CI ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ°Π³Π°.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° TypeScript
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ TypeScript Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π°Π²ΡΠΎΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠΈΠΏΡ.
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Git
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Intlayer. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈΡ Π² Π²Π°Ρ Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² Π²Π°Ρ ΡΠ°ΠΉΠ» .gitignore:
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ VS Code
Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Ρ Intlayer ΡΠ΄ΠΎΠ±Π½Π΅Π΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Intlayer Π΄Π»Ρ VS Code.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ· VS Code Marketplace
ΠΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ:
- ΠΠ²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°.
- ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ².
- ΠΠ½Π»Π°ΠΉΠ½ΠΎΠ²ΡΠ΅ ΠΏΡΠ΅Π²ΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.
- ΠΡΡΡΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ Π»Π΅Π³ΠΊΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ².
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠΌ. Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Intlayer Π΄Π»Ρ VS Code.
Π§ΡΠΎ Π΄Π°Π»ΡΡΠ΅?
ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π½Π΅Π΄ΡΠΈΡΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΈΠ»ΠΈ Π²ΡΠ½Π΅ΡΡΠΈ Π²Π°Ρ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π²ΠΎ Π²Π½Π΅ΡΠ½ΡΡ CMS.
Π§Π°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
Π£ Vite Π½Π΅Ρ ΠΌΠ½Π΅Π½ΠΈΡ ΠΎΠ± i18n, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΠ±ΠΎΡ ΠΈΠ΄ΡΡ ΠΈΠ· ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Vanilla JS:
- ΠΠ°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΡΡΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ-ΡΠ»ΠΎΠ²Π°ΡΡ, ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠΉ Π² Π²Π°ΡΡ ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π°: Π±Π΅Π· Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π½ΠΎ Π±Π΅Π· ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ, Π±Π΅Π· ΠΏΡΠ°Π²ΠΈΠ» ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΈ Π±Π΅Π· ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ, ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠΈΡ Π²Π°ΠΌ ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅.
i18next: Π·ΡΠ΅Π»ΡΠΉ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°, Π½ΠΎ ΠΎΠ½ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΠΊΠ°ΠΊ JSON.Intlayer: ΠΊΠΎΠ½ΡΠ΅Π½Ρ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΉ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ Vite Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ, Ρ ΠΠ-ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠΌ, Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠΌ ΠΈ CMS.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΉ Π΄Π»Ρ Vite Π²ΡΠΈΠ³ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ ΠΈ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°ΡΡΡΡ tree-shaking Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π° Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ ΠΊΠ°ΠΊ JSON Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ. Π‘ΠΌ. ΠΏΠΎΡΠ΅ΠΌΡ Intlayer ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ.
ΠΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Ρ useIntlayer ΡΠΎΡΠ½ΡΠΌΠΈ Π·Π°ΠΏΠΈΡΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΊΠ»ΡΡΠΈ ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ, Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»ΠΎΠ²Π°ΡΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΡΠΌ. ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°ΠΌΠΈ Intlayer ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π½Π΄Π»Π° ΠΈ ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎ 50%. Π‘ΠΌ. ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π±Π°Π½Π΄Π»Π° ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ.
Π Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ. Π‘Π»Π΅Π΄ΡΠΉΡΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Ρ ΠΏΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Ρ i18next, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅Π½Ρ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠΈΠ³ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ: ΠΏΠ»Π°Π³ΠΈΠ½ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ JSON ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π²Π°ΡΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ JSON ΠΊΠ°ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈΡΡΠΈΠ½Ρ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΠ· Π½ΠΈΡ ΡΠ»ΠΎΠ²Π°ΡΠΈ Intlayer, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ±Π° ΡΠ»ΠΎΡ ΠΎΡΡΠ°ΡΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ, ΠΏΠΎΠΊΠ° Π²Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ.
ΠΠ°. ΠΠ»Π°Π³ΠΈΠ½ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ JSON ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ Π²Π°ΡΠΈ ΡΠ°ΠΉΠ»Ρ /messages/{locale}/{namespace}.json ΠΊΠ°ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈΡΡΠΈΠ½Ρ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΠ· Π½ΠΈΡ
ΡΠ»ΠΎΠ²Π°ΡΠΈ Intlayer, Π² ΠΎΠ±ΠΎΠΈΡ
Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ
. ΠΠ»Π°Π³ΠΈΠ½ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ PO Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π΄Π»Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² gettext, Π° ΡΠ°ΠΉΠ»Ρ ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΏΠΎ ΡΠ·ΡΠΊΠ°ΠΌ Π²ΠΌΠ΅ΡΡΠΎ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅.
ΠΠ΅Ρ. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ npx intlayer extract, ΠΈ Intlayer ΠΏΡΠΎΡΠΈΡΠ°Π΅Ρ Π²Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΈΠ·Π²Π»Π΅ΡΡΡ ΡΡΡΠΎΠΊΠΈ, Π²ΠΈΠ΄ΠΈΠΌΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΈ Π·Π°ΠΏΠΈΡΠ΅Ρ ΡΠ°ΠΉΠ» .content ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΈΠ· Π½ΠΈΡ
, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΠ΅ diff Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠΎΠΊ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ. Π¨Π°Π³ 13 ΡΡΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡ Π²Π°Ρ ΡΠ΅ΡΠ΅Π· ΡΡΠΎ.
ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ 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ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΆΡΡΡΠΊΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.
