Π‘ΠΏΡΠΎΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ²ΠΎΠ΄ΠΊΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° AI
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠ.
Π‘ΠΌΠΎΡΡΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΈΠ΄Π΅Ρ ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½Π΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ Π²Π½Π΅ΡΡΠΈ ΡΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄, ΠΏΠΎΠ΄Π°Π² Π·Π°ΠΏΡΠΎΡ Π½Π° Π²ΡΡΡΠ³ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° GitHub.
Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ GitHubΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Markdown Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
vue-i18n VS Intlayer: ΠΠ΅Π½ΡΠΌΠ°ΡΠΊ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (i18n) Π΄Π»Ρ Vue
vue-i18n β ΡΡΠ°Π»ΠΎΠ½Π½Π°Ρ i18n-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Vue. Intlayer β Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Ρ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ Ρ Vue (vue-intlayer). ΠΡΠ° ΡΡΠ°ΡΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ, Π²ΠΎ ΡΡΠΎ ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΡΡΡ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· Π½ΠΈΡ
ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ°Π½Π½ΡΠ΅ Π²Π·ΡΡΡ ΠΈΠ· Benchmark Bloom, open-source Π½Π°Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π±ΡΠ°ΡΠ·Π΅Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ.
tl;dr: ΠΠ° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Vite + Vue 3vue-i18nΠΎΡΠ΄Π°ΡΡ 134,9 ΠΠ gzip-ΡΠΆΠ°ΡΠΎΠ³ΠΎ JavaScript Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΎΡΠΈΠ² 41,3 ΠΠ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· i18n. Intlayer ΠΎΡΠ΄Π°ΡΡ 57,1 ΠΠ. ΠΠ΄ΠΈΠ½ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π½ΡΠ°ΠΉΠΌvue-i18nΠ²Π΅ΡΠΈΡ 24,3 ΠΠ gzip (Π² 6 ΡΠ°Π· Π±ΠΎΠ»ΡΡΠ΅ 3,9 ΠΠ Ρ Intlayer), ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° Π½Π΅ΡΡΡ 90 % ΡΡΡΠΎΠΊ ΡΡΠΆΠΈΡ ΡΡΡΠ°Π½ΠΈΡ, Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎ, ΡΡΠ½Π΅Ρ Π·Π° ΡΠΎΠ±ΠΎΠΉ 196 ΠΠ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌΡ Π΄Π΅ΡΠ΅Π²Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠ΄Π°ΠΏΡΠ΅Ρ@intlayer/vue-i18nΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ APIvue-i18nΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π» 47,0 ΠΠ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ.
ΠΠΎΡΠΎΡΠΊΠΎ
- vue-i18n β Π΄Π΅-ΡΠ°ΠΊΡΠΎ i18n-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Vue 2 / Vue 3 ΠΈ ΡΠ΄ΡΠΎ
@nuxtjs/i18n. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΡΠΈΠ»Π΅ ICU, Π±Π»ΠΎΠΊΠΈ<i18n>Π² SFC, Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°v-t, ΡΠΎΡΠΌΠ°ΡΡΠ΅ΡΡd()/n(), Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡΡΡ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ Π²createI18n(); Π»Π΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΠΈ β ΡΡΠΎ ΡΡΡΠ½ΠΎΠΉ ΠΏΠ°ΡΡΠ΅ΡΠ½ ΡsetLocaleMessage(), Π° ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ°ΡΡΡΡΡΠ°ΠΌ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠΎΠΈΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. - Intlayer β ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. Π‘Π»ΠΎΠ²Π°ΡΠΈ
.content.tsΠ»Π΅ΠΆΠ°Ρ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ½ΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ (vite-intlayer) Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ tree-shaking ΠΈ Π»Π΅Π½ΠΈΠ²ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ ΠΈ ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΡΠΌ, ΡΡΡΠΎΠ³ΠΈΠ΅ ΡΠΈΠΏΡ TypeScript Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΠΈΠ· Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, Π° ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ. ΠΠΊΠ»ΡΡΠ°Π΅Ρ Ρ Π΅Π»ΠΏΠ΅ΡΡ Π΄Π»Ρ ΡΠΎΡΡΠ΅ΡΠ° / SEO, Visual Editor / CMS ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠ.
ΠΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π² ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π΄Π»Ρ ΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ
ΠΠ΅ΠΉΠ΄ΠΆΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. Π‘Π½ΠΈΠΌΠΊΠΈ Π±ΡΠ΄ΡΡ ΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ.
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π±ΠΎΠΊ ΠΎ Π±ΠΎΠΊ
ΠΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π² ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π΄Π»Ρ ΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ
| ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ | vue-intlayer (Intlayer) | vue-i18n |
|---|---|---|
| ΠΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ | β
ΠΠ°, .content.ts ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ | β
Π§Π΅ΡΠ΅Π· Π±Π»ΠΎΠΊΠΈ SFC <i18n> (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ); ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ |
| ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ TypeScript | β Π‘ΡΡΠΎΠ³ΠΈΠ΅ ΡΠΈΠΏΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° | β Π₯ΠΎΡΠΎΡΠΈΠ΅ ΡΠΈΠΏΡ; ΡΡΡΠΎΠ³Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ ΡΡ Π΅ΠΌΡ ΠΈ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Ρ |
| ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² | β ΠΡΠΈΠ±ΠΊΠ° TypeScript + ΠΎΡΠΈΠ±ΠΊΠ°/ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ | β οΈ Fallback Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ + ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ |
| ΠΠΎΠ³Π°ΡΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ (ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ / Markdown) | β ΠΡΡΠΌΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° | β οΈ ΠΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² <i18n-t>; Markdown ΡΠ΅ΡΠ΅Π· Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ |
| ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ICU | β οΈ Π ΡΠ°Π±ΠΎΡΠ΅ | β ΠΠ° |
| Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Π΄Π°ΡΡ, ΡΠΈΡΠ»Π°, Π²Π°Π»ΡΡΡ) | β Π€ΠΎΡΠΌΠ°ΡΡΠ΅ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Intl | β
d() / n() Ρ datetimeFormats / numberFormats |
| ΠΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ | β
Π₯Π΅Π»ΠΏΠ΅ΡΡ Π΄Π»Ρ Vue Router / Nuxt, getMultilingualUrls | β οΈ ΠΠ΅ Π² ΡΠ΄ΡΠ΅ (@nuxtjs/i18n ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΎΡΡΠ΅ΡΠ°) |
| SEO-Ρ Π΅Π»ΠΏΠ΅ΡΡ (hreflang, sitemap, robots) | β ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Ρ Π΅Π»ΠΏΠ΅ΡΡ | β ΠΠ΅ Π² ΡΠ΄ΡΠ΅ |
| Tree-shaking (ΠΎΡΠ΄Π°Π²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ) | β ΠΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ, ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΡΠΌ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ | β οΈ ΠΡΡΡΠ½ΡΡ: ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ, setLocaleMessage() Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ°ΡΡΡΡΡ |
| ΠΠ΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° | β
importMode: 'dynamic' (ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ) | β
Π ΡΡΠ½ΠΎΠΉ import() + setLocaleMessage() |
| ΠΡΠΈΡΡΠΊΠ° Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° | β ΠΡΡΡΠ²ΡΠ΅ ΡΠ»ΠΎΠ²Π°ΡΠΈ ΡΠ΄Π°Π»ΡΡΡΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ | β ΠΠ΅ Π²ΡΡΡΠΎΠ΅Π½ΠΎ |
| ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² (CLI / CI) | β
npx intlayer content test | β οΈ Π‘ΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ (vue-i18n-extract) |
| ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠ | β ΠΡΡΡΠΎΠ΅Π½, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²Π°ΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΊΠ»ΡΡΠΈ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° | β ΠΠ΅Ρ |
| Visual Editor / CMS | β ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ Visual Editor + ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ CMS | β ΠΠ΅Ρ (Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ) |
| MCP-ΡΠ΅ΡΠ²Π΅Ρ ΠΈ Agent Skills | β ΠΠ° | β ΠΠ΅Ρ |
| ΠΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° / ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ | β οΈ ΠΠ΅Π½ΡΡΠ΅, Π½ΠΎ Π±ΡΡΡΡΠΎ ΡΠ°ΡΡΡΡ | β ΠΠΎΠ»ΡΡΠ°Ρ ΠΈ Π·ΡΠ΅Π»Π°Ρ Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ Vue |
ΠΠ΅Π½ΡΠΌΠ°ΡΠΊ
Π§ΡΠΎ ΠΈΠ·ΠΌΠ΅ΡΡΠ»ΠΎΡΡ
ΠΠ°Π±ΠΎΡ Benchmark Bloom ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Vite + Vue 3 Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ: 10 ΡΡΡΠ°Π½ΠΈΡ (home, about, blog, careers, contact, FAQ, pricing, products, settings, team), 10 Π»ΠΎΠΊΠ°Π»Π΅ΠΉ (en, fr, es, de, it, pt, zh, ja, ko, ru), ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ. Π‘ΡΡΠ°Π½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΡΡΡΡΡ Π² en ΠΈ fr.
ΠΠ±Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ static β ΡΠΎΠΉ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΡ
ΠΎΠ΄ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Vue-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²: Π΄Π»Ρ vue-i18n JSON ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² createI18n({ messages }); Π΄Π»Ρ Intlayer β importMode: 'static' ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π ΡΡΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Intlayer ΡΠΎΠΆΠ΅ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ, Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠ° Π½Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠ²Π°ΡΠΈ ΡΠ΅Ρ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½Π° ΡΠ΅Π½Π΄Π΅ΡΠΈΡ.
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ Π½Π°Π±ΠΎΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ:
- Lib size: gzip-ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ i18n-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ. Π€ΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠ°Π½ΡΠ°ΠΉΠΌΠ°.
- Page JS: gzip JavaScript, Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠΉ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ, ΡΡΡΠ΅Π΄Π½ΡΠ½Π½ΡΠΉ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌ ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠΌ.
- Locale leak %: Π΄ΠΎΠ»Ρ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄ΡΠ½Π½ΡΡ
ΡΡΡΠΎΠΊ Π² Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΌ JS, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ Π»ΠΎΠΊΠ°Π»ΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ (ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΠΈ ΠΏΠΎ
enΠΈfr, ΡΠ°ΠΊ ΡΡΠΎ 50 % ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«Π²ΡΠΎΡΠ°Ρ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅ΠΌΠ°Ρ Π»ΠΎΠΊΠ°Π»Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡΒ»; ΠΏΡΠΈ 10 ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΡ Π»ΠΎΠΊΠ°Π»ΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΈ Π²ΡΡΠ΅). - Page leak %: Π΄ΠΎΠ»Ρ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄ΡΠ½Π½ΡΡ ΡΡΡΠΎΠΊ Π² Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΌ JS, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΡΡΡΠ°Π½ΠΈΡΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ.
- Component avg: ΡΡΠ΅Π΄Π½ΠΈΠΉ gzip-ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎ. ΠΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ i18n-ΡΠ°Π½ΡΠ°ΠΉΠΌΠ° ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΡΠ½Π΅Ρ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ.
- E2E reactivity: ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ±ΠΎΡΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ
html[lang]Π² DOM (Playwright, 5 ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ). - Page load:
PerformanceNavigationTiming.duration.
Π¦ΠΈΡΡΡ Π½ΠΈΠΆΠ΅ Π²Π·ΡΡΡ ΠΈΠ· ΠΏΡΠΎΠ³ΠΎΠ½Π° ΠΎΡ 2026-09-12 Ρvue-i18n11.4.0 ΠΈintlayer9.5.0 / 9.5.1. Π’Π΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΡΡΡΠΊΠΎΠ² ΡΡΡΠΎΠΊ Π½Π° Π»ΠΎΠΊΠ°Π»Ρ), ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΡΠ΅Π½ΡΡ ΡΡΠ΅ΡΠΊΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅ΡΠ½ΠΎΡΡΡ: ΠΎΠ½ΠΈ ΡΠ°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π²Π°ΡΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠ°Π½ΡΠ°ΠΉΠΌΠ° ΠΎΡΡΠ°ΡΡΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ.
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ Π½Π° Vite + Vue 3
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ:
ΠΠ΅ΡΡΠΈΠΊΠ°
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° JSON
ΠΠ΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ JSON (ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½)
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ
Π§ΡΠΎ ΡΡΠΎ Π·Π° ΠΌΠ΅ΡΡΠΈΠΊΠ°?
ΠΠ±ΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ gzip. ΠΠ½ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ ΠΈ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΏΠΎΡΠ»Π΅ tree-shaking ΠΈ ΠΌΠΈΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ?
ΠΠ΅Π½ΡΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ JavaScript, ΡΡΠΎ ΡΡΠΊΠΎΡΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅.
ΠΠΈΠ΄
ΠΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π² ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π΄Π»Ρ ΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ
| ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° | Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡ | Lib size (gz) | Lib size (min) | Page JS ΡΡ. (gz) | Locale leak | Page leak | Component ΡΡ. (gz) | Π Π΅Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ E2E | Page load |
|---|---|---|---|---|---|---|---|---|---|
| base (Π±Π΅Π· i18n) | - | 0,0 ΠΠ | 0,0 ΠΠ | 41,3 ΠΠ | 0,0 % | - | 1,1 ΠΠ | 1,8 ΠΌΡ | 10,8 ΠΌΡ |
vue-i18n | static | 24,3 ΠΠ | 83,2 ΠΠ | 134,9 ΠΠ | 50,0 % | 90,0 % | 196,0 ΠΠ | 2,8 ΠΌΡ | 13,6 ΠΌΡ |
vue-intlayer | static | 3,9 ΠΠ | 11,1 ΠΠ | 57,1 ΠΠ | 56,8 % | 0,0 % | 7,7 ΠΠ | 4,5 ΠΌΡ | 13,8 ΠΌΡ |
@intlayer/vue-i18n (compat) | static | 7,9 ΠΠ | 23,2 ΠΠ | 47,0 ΠΠ | 15,0 % | 0,0 % | 8,4 ΠΠ | 1,5 ΠΌΡ | 9,3 ΠΌΡ |
Π‘ΡΠΎΠ»Π±Π΅Ρ page-leak Π΄Π»Ρ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΡΠ°Π²Π»Π΅Π½ ΠΏΡΡΡΡΠΌ: Π±Π΅Π· i18n-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ½ΡΡΠΈΠ΅ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΊΠΎΠ² ΠΏΠΎΠ΄Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΆΡΡΡΠΊΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π² ΠΎΠ±ΡΠΈΡ ΡΠ°Π½ΠΊΠ°Ρ , ΠΈ ΡΠΈΡΠ»ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π°.
ΠΠ°ΠΊ ΡΡΠΎ ΡΠΈΡΠ°ΡΡ
- Π‘ΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠ°Π½ΡΠ°ΠΉΠΌΠ°.
vue-i18nβ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΡΠΆΡΠ»ΡΡ ΡΠ°Π½ΡΠ°ΠΉΠΌΠΎΠ² Π²ΠΎ Π²ΡΡΠΌ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ΅: 24,3 ΠΠ gzip / 83,2 ΠΠ Π² ΠΌΠΈΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π΄Π»Ρ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π΅Π³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ.vue-intlayerΡΡΠΎΠΈΡ 3,9 ΠΠ gzip. ΠΡΠΎΡ ΡΠ°Π·ΡΡΠ² ΠΎΠΏΠ»Π°ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ Π²Π°Ρ ΡΡΡΠΎΠΊ. - JavaScript Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· i18n Π²Π΅ΡΠΈΡ 41,3 ΠΠ.
vue-i18nΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π²ΡΡΠΎΠ΅ β Π΄ΠΎ 134,9 ΠΠ; Intlayer Π²ΡΡ ΠΎΠ΄ΠΈΡ Π½Π° 57,1 ΠΠ, +15,8 ΠΠ, Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ β Π΄Π΅ΡΡΡΡ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΡ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ (ΡΠΌ. ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠ½ΠΊΡ). - Π£ΡΠ΅ΡΠΊΠ°. Π‘
createI18n({ messages: { en, fr, ... } })ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΎΡΠ΄Π°ΡΡ Π²ΡΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ ΡΡΡΠΎΠΊΠΈ Π²ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡ: 50 % ΡΡΠ΅ΡΠΊΠΈ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ (ΠΏΠΎ Π΄Π²ΡΠΌ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅ΠΌΡΠΌ Π»ΠΎΠΊΠ°Π»ΡΠΌ) ΠΈ 90 % ΡΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡ. Π Π΅ΠΆΠΈΠΌstaticΡ Intlayer ΡΠΎΠΆΠ΅ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ (ΠΎΡΡΡΠ΄Π° ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠΌΡΠΉ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΡΠΊΠΈ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ), Π½ΠΎ Π΄Π°ΡΡ 0 % ΡΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡ: ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠ²Π°ΡΠΈ ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π½Π΄Π΅ΡΠΈΡ. ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π°importMode: 'dynamic'ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΈ ΡΡΠ΅ΡΠΊΡ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ; ΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π΅ Π²Ρ ΠΎΠ΄ΠΈΠ»Π° Π² Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΎΠ³ΠΎΠ½ Π΄Π»Ρ Vue. - Π Π°Π·ΠΌΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² β ΡΠΎ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ
useI18n(), ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ Π² 196 ΠΠ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎt()ΠΏΡΠΈΠ²ΡΠ·Π°Π½ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅ΡΠΆΠΈΡ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ. Π’ΠΎΡ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡuseIntlayer()ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² 7,7 ΠΠ: ΠΎΠ½ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΠ»ΠΎΠ²Π°ΡΡ. - Π Π΅Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π½ΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ (2β5 ΠΌΡ). Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Vue Π΄Π΅Π»Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ Π΄Π΅ΡΡΠ²ΡΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ.
@intlayer/vue-i18n, drop-in Π°Π΄Π°ΠΏΡΠ΅Ρ, ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ APIvue-i18nΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π» 47,0 ΠΠ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ 8,4 ΠΠ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ»ΡΡ.
ΠΠ»Ρ ΡΠΏΡΠ°Π²ΠΊΠΈ: ΡΠΎΡ ΠΆΠ΅ ΠΏΡΠΎΠ³ΠΎΠ½ ΠΈΠ·ΠΌΠ΅ΡΠΈΠ» fluent-vue Π½Π° ΡΡΠΎΠ²Π½Π΅ 171,8 ΠΠ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ, 29,7 ΠΠ ΡΠ°Π½ΡΠ°ΠΉΠΌΠ° ΠΈ 217 ΠΠ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ.
ΠΠΎΠ»Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΈ Π²ΡΠ΅ΠΌΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΠΌΠΈ Π² ΠΎΡΡΡΡΠ΅ benchmark ΠΏΠΎ Vue.
ΠΡΠΊΡΠ΄Π° ΡΠ°Π·ΡΡΠ²? ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΡΠΎΡΠΈΠ² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ
vue-i18n β ΡΡΠΎ ΡΠ°Π½ΡΠ°ΠΉΠΌ. createI18n() ΡΠΎΠ·Π΄Π°ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ, Ρ
ΡΠ°Π½ΡΡΠΈΠΉ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ; useI18n() ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊ Π½Π΅ΠΌΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ; t("footer.github") ΠΈΡΠ΅Ρ ΠΊΠ»ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅Π½Π΄Π΅ΡΠ°. ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ Π±Π»ΠΎΠΊΠΈ SFC <i18n>, v-t ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ Π³ΡΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΡ Π΄Π΅ΡΠ΅Π²ΠΎ:
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΡΠ΅ en.json Π½Π° ΡΠ°ΠΉΠ»Ρ ΠΏΠΎ ΠΌΠ°ΡΡΡΡΡΠ°ΠΌ, Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ setLocaleMessage() Π² guard ΡΠΎΡΡΠ΅ΡΠ° ΠΈ Π²Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΌΠ°ΡΡΡΡΡΠΎΠ² ΡΠ°ΠΉΠ»Π°ΠΌ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². Π Π°Π½ΡΠ°ΠΉΠΌ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π·Π° Π²Π°Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠ»ΡΡΠΈ Π·Π°ΠΏΡΠΎΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ.
Intlayer ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡ ΡΡΠΎ Π·Π½Π°Π½ΠΈΠ΅ Π½Π° ΡΡΠ°ΠΏ ΡΠ±ΠΎΡΠΊΠΈ. ΠΠΎΠ½ΡΠ΅Π½Ρ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ, Π° vite-intlayer ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΠΊΠ°ΠΊΠΎΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ:
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ ΡΠΎΠ²Π½ΠΎ ΡΠΎΡ JSON, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ΅Π½ ΡΡΠΎΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΈ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΡΠ»ΠΎΠ²Π°ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ°ΡΡΡΡΡΠ°ΠΌ β ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ, Π° Π½Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°.
Π§ΡΠΎΠ±Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ±ΡΠΎΡΠΈΡΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅dictionary.importMode: 'dynamic'Π²intlayer.config.ts. Π‘ΠΌ. Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π±Π°Π½Π΄Π»Π°.
ΠΠΏΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
vue-i18n
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Intlayer
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ
vue-i18n
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
t('counter.label') ΠΎΡΡΠ°ΡΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ, ΠΏΠΎΠΊΠ° Π²Ρ ΡΠ°ΠΌΠΈ Π½Π΅ ΡΠΈΠΏΠΈΠ·ΠΈΡΡΠ΅ΡΠ΅ ΡΡ
Π΅ΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ; ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠ° ΠΎΡΡΠ΅Π½Π΄Π΅ΡΠΈΡ ΠΊΠ»ΡΡ.
Intlayer
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
label ΠΈ increment ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ; ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠ° β ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° TypeScript, ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΡΠ°Π½ΡΡΠ·ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β ΠΎΡΠΈΠ±ΠΊΠ° ΡΠ±ΠΎΡΠΊΠΈ.
ΠΠ΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΠΈ
vue-i18n
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ loadLocaleMessages() ΠΈΠ· guard ΡΠΎΡΡΠ΅ΡΠ° ΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·Π±Π΅ΠΉΡΠ΅ locales/{locale}.json ΠΏΠΎ ΠΌΠ°ΡΡΡΡΡΠ°ΠΌ, Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌ.
Intlayer
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ API vue-i18n, ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Intlayer
@intlayer/vue-i18n β ΡΡΠΎ drop-in Π°Π΄Π°ΠΏΡΠ΅Ρ: useI18n(), t(), d(), n(), ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ {name} ΠΈ {0}, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΎΡΠΌΡ ΡΠ΅ΡΠ΅Π· pipe ("car | cars"), v-t ΠΈ i18n.global.locale ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΈΠ· ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ Intlayer, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
vite-intlayer.
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°
Π Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ΅ compat-ΡΠ±ΠΎΡΠΊΠ° ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΌΠ΅Π½ΡΡΠΈΠ»Π°ΡΡ Ρ 134,9 ΠΠ Π΄ΠΎ 47,0 ΠΠ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ Ρ 196 ΠΠ Π΄ΠΎ 8,4 ΠΠ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π΅ ΠΌΠ΅Π½ΡΠ»ΠΈΡΡ. ΠΠ°ΡΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ locales/{locale}.json ΠΌΠΎΠ³ΡΡ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΠΈΡΡΠΈΠ½Ρ ΡΠ΅ΡΠ΅Π· ΠΏΠ»Π°Π³ΠΈΠ½ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ JSON.
Π‘ΠΌ. ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Ρ vue-i18n ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ. Π£ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Nuxt ΡΠΎΡ ΠΆΠ΅ ΠΏΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ @nuxtjs/i18n.
ΠΠΎΠ³Π΄Π° ΡΡΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ?
- ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ vue-i18n, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Vue, Π²Ρ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΠ΅ΡΡ Π½Π° ICU-ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈ SFC
<i18n>, ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅@nuxtjs/i18nΠΈΠ»ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ JSON. ΠΠ°Π»ΠΎΠΆΠΈΡΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΈ Π»Π΅Π½ΠΈΠ²ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΏΠΎ ΠΌΠ°ΡΡΡΡΡΠ°ΠΌ, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π½Π΄Π»Π° ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. - ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ Intlayer, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ ΠΊΠΎΠ½ΡΠ΅Π½Ρ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ, ΡΡΡΠΎΠ³ΠΈΠΉ TypeScript, ΠΎΡΠΈΠ±ΠΊΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, tree-shaking ΠΈ Π»Π΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π±Π΅Π· ΡΡΠΈΠ»ΠΈΠΉ ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΡΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ (Visual Editor, CMS, ΠΠ-ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄, MCP-ΡΠ΅ΡΠ²Π΅Ρ). ΠΡΠΎΠ±Π΅Π½Π½ΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²ΡΡ Π±Π°Π· Vue / Nuxt ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½-ΡΠΈΡΡΠ΅ΠΌ.
- ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅
@intlayer/vue-i18n, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ Π½Π°vue-i18nΠΈ Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΠΈΠ³ΡΡΡ Π² ΡΠ°Π·ΠΌΠ΅ΡΠ΅ Π±Π°Π½Π΄Π»Π° Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ.
Π§Π°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
Π ΡΠΎ, ΠΈ Π΄ΡΡΠ³ΠΎΠ΅, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π°. vue-intlayer, ΡΡΠΎ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΡΠ°Π½ΡΠ°ΠΉΠΌ Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΡΠ΅ΠΌΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ useIntlayer(). @intlayer/vue-i18n, ΡΡΠΎ Π°Π΄Π°ΠΏΡΠ΅Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ, ΡΠΎΡ
ΡΠ°Π½ΡΡΡΠΈΠΉ API vue-i18n ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡΡΠΈΠΉ Π΅Π³ΠΎ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠΈΠ³ΡΠΈΡΠΎΠ²Π°ΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΠ°ΠΉΠ»Ρ.
ΠΠ΄Π°ΠΏΡΠ΅Ρ ΠΈΡ
Π½Π΅ ΡΡΠΈΡΡΠ²Π°Π΅Ρ. ΠΠ΅ΡΠ΅Π½Π΅ΡΠΈΡΠ΅ ΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² JSON-ΡΠ°ΠΉΠ»Ρ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ ΠΈΠ»ΠΈ Π² ΡΠ°ΠΉΠ» .content.ts ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΈΠ΄Π΅Ρ ΡΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ vue-i18n, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ.
ΠΠ°. Intlayer Ρ Nuxt ΠΎΡ
Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΠ·ΡΡΠ½ΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ, middleware Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ sitemap. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ @nuxtjs/i18n, Π°Π΄Π°ΠΏΡΠ΅Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Nuxt i18n ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ.
ΠΠ°. ΠΠ»Π°Π³ΠΈΠ½ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ JSON ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡ
Ρ Π΄ΠΈΠ°Π»Π΅ΠΊΡΠΎΠΌ vue-i18n ({name}, {0}, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΎΡΠΌΡ Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ "car | cars") ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΡΠ΅ΡΠ΅Π· CLI ΠΈΠ»ΠΈ CMS.
ΠΠ°ΡΠΈΠ²Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ICU Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅. ΠΠ΄Π°ΠΏΡΠ΅Ρ @intlayer/vue-i18n ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ vue-i18n, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΎΡΠΌΡ Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ/ΡΠΏΠΈΡΠΎΡΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ. Π ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠ»ΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Intlayer ΡΠΌ. ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ.
Π‘Π²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ
Π‘ΠΏΡΠ°Π²ΠΎΡΠ½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ:
ΠΡΡΡΡΡ benchmark:
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΎΡΠΊΡΠ΄Π° Π²Π·ΡΠ»ΠΈΡΡ ΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΏΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈΡΡΠΎΡΠΈΡ i18n Π² JavaScript.
ΠΠ²ΡΠ·Π΄Ρ GitHub
ΠΠ²ΡΠ·Π΄Ρ GitHub β ΡΠΈΠ»ΡΠ½ΡΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π΄ΠΎΠ²Π΅ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΠΈ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠΉ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ. Π₯ΠΎΡΡ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΡΠΌΠΎΠΉ ΠΌΠ΅ΡΠΎΠΉ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°, ΠΎΠ½ΠΈ ΠΎΡΡΠ°ΠΆΠ°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΡΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ, ΡΠ»Π΅Π΄ΡΡ Π·Π° Π΅Π³ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΠΌ ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±ΡΠ΄ΡΡ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
ΠΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ²
ΠΠ²ΡΠ·Π΄Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ. ΠΠΎΠΌΠΌΠΈΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π±ΠΎΡΡ Π²ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Ρ Intlayer ΠΎΠΊΠΎΠ»ΠΎ 7 500 ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ²: Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌΡΡ
Π·Π΄Π΅ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² 5 ΡΠ°Π· Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Ρ next-intl ΠΈΠ»ΠΈ next-i18next.
- intlify/vue-i18n
- aymericzip/intlayer
ΠΠΎΠΌΠΌΠΈΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅, ΠΈΡΡΠΎΡΠ½ΠΈΠΊ: GitHub API.
Intlayer ΡΡΠΎ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΡΡΡΡ Π²Ρ ΠΎΠ΄ΡΡ Π²ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄Π»Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ², CLI ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. Π‘ΡΠΈΡΠ°ΠΉΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, Π° Π½Π΅ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°.
ΠΠ°Π³ΡΡΠ·ΠΊΠΈ npm
- vue-i18n
- vue-intlayer
ΠΡΡΠΎΡΠ½ΠΈΠΊ: API Π·Π°Π³ΡΡΠ·ΠΎΠΊ ΡΠ΅Π΅ΡΡΡΠ° npm.
Π§ΠΈΡΠ»ΠΎ Π·Π°Π³ΡΡΠ·ΠΎΠΊ Π²ΠΎΠ·Π½Π°Π³ΡΠ°ΠΆΠ΄Π°Π΅Ρ ΡΠ°ΠΌΡΠ΅ ΡΡΠ°ΡΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ Π»ΡΡΡΠΈΠ΅. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π²ΡΠΏΡΡΠ΅Π½Π½ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ Π½Π°Π·Π°Π΄, Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ±ΡΠ°Π» Π΅Ρ ΡΠΎΠ³Π΄Π°, ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΡΠΊ CI ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°Π²ΠΈΡΡΡΠΈΠΉ ΠΎΡ Π½Π΅Ρ ΠΏΠ°ΠΊΠ΅Ρ. ΠΡΠ° ΡΠΈΡΡΠ° ΠΈΠ·ΠΌΠ΅ΡΡΠ΅Ρ ΠΈΠ½Π΅ΡΡΠΈΡ, Π° Π½Π΅ ΠΎΡΠΎΠ·Π½Π°Π½Π½ΡΠΉ Π²ΡΠ±ΠΎΡ.
ΠΠ-Π°ΡΡΠΈΡΡΠ΅Π½ΡΡ ΡΡΠΈΠ»ΠΈΠ²Π°ΡΡ ΡΡΠΎΡ ΡΡΡΠ΅ΠΊΡ. next-intl, i18next ΠΈ vue-i18n ΠΏΠΎΠ²ΡΡΠ΄Ρ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ Π² ΠΊΠΎΠ΄Π΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ°Π»ΠΈΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π°ΡΡΠΈΡΡΠ΅Π½ΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ ΠΈΡ
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½Π΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ. ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ. Π‘ΡΠ°Π²Π½ΠΈΠ²Π°ΠΉΡΠ΅ ΠΏΠΎ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΡ, Π° Π½Π΅ ΠΏΠΎ ΡΠΈΡΠ»Ρ Π·Π°Π³ΡΡΠ·ΠΎΠΊ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
vue-i18n β Π·ΡΠ΅Π»Π°Ρ, Π³ΠΈΠ±ΠΊΠ°Ρ ΠΈ Π³Π»ΡΠ±ΠΎΠΊΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Ρ Vue Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠ΅Π½ΡΠΌΠ°ΡΠΊ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π²ΠΎ ΡΡΠΎ ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΡΡΡ Π΅Ρ runtime-first Π΄ΠΈΠ·Π°ΠΉΠ½ Π² ΡΠ±ΠΎΡΠΊΠ΅ Vite: ΡΠ°Π½ΡΠ°ΠΉΠΌ 24 ΠΠ gzip, 134,9 ΠΠ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Π΅ΡΠΈΡ 41 ΠΠ Π±Π΅Π· i18n, 90 % ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΡΡΠΆΠΈΡ
ΡΡΡΠ°Π½ΠΈΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ 196 ΠΠ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²ΠΈΡΠΈΡ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ Π΄Π΅ΡΠ΅Π²Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
Intlayer ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡ ΡΠ°Π±ΠΎΡΡ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ. Π‘Π»ΠΎΠ²Π°ΡΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ ΠΈ ΠΎΡΠΈΡΡΠΊΠ° ΠΌΡΡΡΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° β ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ±ΠΎΡΠΊΠΈ, Π° Π½Π΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ. ΠΠ° ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ: ΡΠ°Π½ΡΠ°ΠΉΠΌ 3,9 ΠΠ, 57,1 ΠΠ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ, 0 % ΡΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π² 25 ΡΠ°Π· ΠΌΠ΅Π½ΡΡΠ΅. Π Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ, @intlayer/vue-i18n ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΏΡΡΠΈ, Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ.
ΠΡΠ΅ ΡΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΊΡΠΈΠΏΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Benchmark Bloom. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π΅Π³ΠΎ ΡΠ°ΠΌΠΈ.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ Β«ΠΠΎΡΠ΅ΠΌΡ Intlayer?Β».
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
ΠΠΎΠΊΠ° Π½Π΅Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π². ΠΡΠ΄ΡΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΌ, ΠΊΡΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΌΡΡΠ»ΡΠΌΠΈ.
