Автор:
    БозданиС:2026-09-02ПослСднСС обновлСниС:2026-09-28

    УстарСл Π»ΠΈ vue-i18n Π² 2026 Π³ΠΎΠ΄Ρƒ?

    Π’ сообщСствС Vue Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Ρ‡Π΅ΠΌ vue-i18n. РазвиваСмая Kazupon Π΅Ρ‰Π΅ со Π²Ρ€Π΅ΠΌΠ΅Π½ Vue 2, ΠΎΠ½Π° Π»Π΅ΠΆΠΈΡ‚ Π² основС @nuxtjs/i18n ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΡ‡Ρ‚ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ многоязычном Vue-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

    Однако Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ 2026 Π³ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄Ρƒ: vue-i18n оказался самым тяТСлым runtime срСди всСх протСстированных Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ².

    Π’ Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π° Vite + Vue Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 31.5 ΠšΠ‘ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ vue-i18n ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎ срСдний объСм JavaScript Π½Π° страницу Π΄ΠΎ 136.4 ΠšΠ‘, Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π° прСвысив исходный вСс.

    Как Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, славящийся Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ тяТСлый инструмСнт Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ? И ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π° Π»ΠΈ сСгодня классичСская runtime-модСль?

    Π“Π»Π°Π²Π½Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹

    Π‘Π°ΠΌΡ‹ΠΉ тяТСлый протСстированный runtime:

    Π‘ вСсом 24.3 ΠšΠ‘ gzipped (83.2 ΠšΠ‘ minified) Π΄ΠΎ добавлСния тСкстов vue-i18n ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 9 Ρ€Π°Π· тяТСлСС Π΄Π²ΠΈΠΆΠΊΠ° intlayer (2.7 ΠšΠ‘).

    Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ объСма страницы Π½Π° 330%:

    vue-i18n ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ» страницу Vue с 31.5 ΠšΠ‘ Π΄ΠΎ 136.4 ΠšΠ‘. Intlayer обСспСчил 59.3 ΠšΠ‘, Ρ‡Ρ‚ΠΎ Π½Π° 56% Π»Π΅Π³Ρ‡Π΅.

    Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ компилятор Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅:

    По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π±Π΅Π· настройки ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… алиасов Π² сборщикС, vue-i18n Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ вСсь компилятор сообщСний Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ для Ρ€Π°Π·Π±ΠΎΡ€Π° строк Π½Π° Π»Π΅Ρ‚Ρƒ.

    Π’Π΅ΠΌΠΏΡ‹ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ:

    Π—Π° ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠΉ Π³ΠΎΠ΄ vue-i18n ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ~259 ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², сфокусированных Π½Π° исправлСнии ошибок ΠΈ совмСстимости с Vue.

    ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ соврСмСнного инструмСнтария:

    НСт встроСнной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Language Server (LSP), MCP-сСрвСров для ИИ ΠΈΠ»ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… CLI-ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°.

    ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° vs. соврСмСнныС инструмСнты

    РСпозиторийЗвСздыВсСго ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²ΠšΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² / годПослСдний ΠΊΠΎΠΌΠΌΠΈΡ‚
    intlify/vue-i18nstarscommitsyearlylast
    aymericzip/intlayerstarscommitsyearlylast

    ΠŸΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π·Π° 12 мСсяцСв:

    • intlify/vue-i18n: 259 ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (ΠΏΠ»Π°Π½ΠΎΠ²Ρ‹Π΅ исправлСния для Vue 3 ΠΈ Nuxt).
    • aymericzip/intlayer: 4 343 ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ компилятора, LSP-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΉ с ИИ-Π°Π³Π΅Π½Ρ‚Π°ΠΌΠΈ).

    Star History Chart

    • intlify/vue-i18n
    • aymericzip/intlayer

    ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² основной Π²Π΅Ρ‚ΠΊΠ΅, источник: GitHub API.

    ЗрСлая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Но соврСмСнныС Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ AST-прСобразования ΠΏΡ€ΠΈ сборкС, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ автоматичСский ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ нСйросСтями. БистСмС, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΎ врСмя выполнСния, слоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°.

    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΎΡ‚ΠΊΡƒΠ΄Π° взялись эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ i18n Π² JavaScript.

    Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ npm

    • vue-i18n
    • vue-intlayer

    Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: API Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ рССстра npm.

    Число Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ Π²ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π°Π΅Ρ‚ самыС старыС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π° Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠ΅. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π½ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄, Π΄ΠΎ сих ΠΏΠΎΡ€ устанавливаСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π±Ρ€Π°Π» Π΅Ρ‘ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запуск CI ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ зависящий ΠΎΡ‚ Π½Π΅Ρ‘ ΠΏΠ°ΠΊΠ΅Ρ‚. Π­Ρ‚Π° Ρ†ΠΈΡ„Ρ€Π° измСряСт ΠΈΠ½Π΅Ρ€Ρ†ΠΈΡŽ, Π° Π½Π΅ осознанный Π²Ρ‹Π±ΠΎΡ€.

    ИИ-ассистСнты ΡƒΡΠΈΠ»ΠΈΠ²Π°ΡŽΡ‚ этот эффСкт. next-intl, i18next ΠΈ vue-i18n ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ΄Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠ±ΡƒΡ‡Π°Π»ΠΈΡΡŒ, поэтому ассистСнты ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΠΈΡ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½Π΅ сравнивая Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹. КаТдая подсказка добавляСт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ. Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΏΠΎ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΡƒ, Π° Π½Π΅ ΠΏΠΎ числу Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ.

    ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Vite + Vue

    Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΠ· 10 страниц ΠΈ 10 языков Π½Π° Vite ΠΈ Vue 3:

    ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ°

    ДинамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° JSON

    ЛСнивая Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² Π²ΠΎ врСмя выполнСния

    ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ JSON (пространства ΠΈΠΌΠ΅Π½)

    ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы

    Π§Ρ‚ΠΎ это Π·Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°?

    ΠžΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ gzip. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ ΠΈ Π»ΠΎΠ³ΠΈΠΊΡƒ извлСчСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° послС tree-shaking ΠΈ ΠΌΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

    ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π²Π°ΠΆΠ½ΠΎ?

    МСньший Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сниТаСт Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ JavaScript, Ρ‡Ρ‚ΠΎ ускоряСт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅.

    Π’ΠΈΠ΄

    Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΡ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… с gzip-сТатиСм. Π”Π°Π½Π½Ρ‹Π΅ доступны Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ° Vue.

    ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ²Π΅Ρ€Ρ…Π΅Π΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

    Π Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎ добавлСния ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ²:

    Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°GzippedMinified
    vue-i18n@11.4.024.3 ΠšΠ‘83.2 ΠšΠ‘
    intlayer@8.7.122.7 ΠšΠ‘7.6 ΠšΠ‘

    Runtime vue-i18n вСсит 24.3 ΠšΠ‘ gzipped, Ρ‡Ρ‚ΠΎ сопоставимо с ядром самого Vue. Intlayer добавляСт лишь 2.7 ΠšΠ‘.

    ВСс страниц ΠΈ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…

    ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡΠ‘Ρ€. JS / стр. (gz)Π£Ρ‚Π΅Ρ‡ΠΊΠ° языковУтСчка Π΄Ρ€. страницБр. ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (gz)
    Π‘Π°Π·Π° (Π±Π΅Π· i18n)31.5 ΠšΠ‘0.0%90.0%0.9 ΠšΠ‘
    vue-i18n136.4 ΠšΠ‘50.2%90.0%196.0 ΠšΠ‘
    Intlayer59.3 ΠšΠ‘51.1%0.0%6.5 ΠšΠ‘

    Π“Π»Π°Π²Π½Ρ‹Π΅ наблюдСния

    Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ рост:

    ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ стСк Vue ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ (~31 ΠšΠ‘), ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ vue-i18n ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ вСс страницы Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ с лишним Ρ€Π°Π·Π°.

    Π£Ρ‚Π΅Ρ‡ΠΊΠ° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹:

    По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 90% тСкста, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° страницу, относится ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌ сайта. Intlayer ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ эти Π΄Π°Π½Π½Ρ‹Π΅, сниТая ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎ 0.0%.

    ВСс ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

    ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ областями видимости Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ Π² срСднСм 196 ΠšΠ‘ Π² vue-i18n ΠΈΠ·-Π·Π° дублирования ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΈΠ² 6.5 ΠšΠ‘ Π² Intlayer.

    Как растёт ΡƒΡ‚Π΅Ρ‡ΠΊΠ°:

    Π“Ρ€Π°Ρ„ΠΈΠΊ Π½ΠΈΠΆΠ΅ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΡ‘ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° для тСорСтичСского прилоТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚ 1 Π΄ΠΎ 10 страниц ΠΈ ΠΎΡ‚ 1 Π΄ΠΎ 10 языков, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎ 30 ΠšΠ‘ тСкста Π½Π° страницу. ДинамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΠΈ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ ось языков, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠΌ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ ось страниц, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡ… сочСтаниС сохраняСт ΠΎΠ±ΡŠΡ‘ΠΌ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ.

    ВСорСтичСская ΡƒΡ‚Π΅Ρ‡ΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΏΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅

    ΠŸΠΎΡ‡Π΅ΠΌΡƒ vue-i18n тяТСлый?

    ΠŸΠ°Ρ€ΡΠ΅Ρ€ AST Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅

    vue-i18n содСрТит встроСнный компилятор сообщСний. ΠŸΡ€Π°Π²ΠΈΠ»Π° мноТСствСнного числа ΠΈ интСрполяции ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² Π΄Π΅Ρ€Π΅Π²ΡŒΡ AST прямо Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Π²ΠΎ врСмя выполнСния.

    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ алиасы Π½Π° vue-i18n/dist/vue-i18n.runtime.esm-bundler.js ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Ρ‡Π΅Ρ€Π΅Π· @intlify/unplugin-vue-i18n. МногиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡƒΠΏΡƒΡΠΊΠ°ΡŽΡ‚ этот шаг.

    ΠœΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ возмоТностСй

    vue-i18n Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ чисСл ΠΈ Π΄Π°Ρ‚, связанныС сообщСния, мосты для Options API ($t, v-t) ΠΈ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ прокси. Π”Π°ΠΆΠ΅ Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простыС строки Π² <script setup>, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ всю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

    ДинамичСскиС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ tree-shaking

    Π’Π°ΠΊ ΠΊΠ°ΠΊ "home.hero.title" вычисляСтся Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅, Π±Π°Π½Π΄Π»Π΅Ρ€Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ. ΠΠ΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ строки ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

    Hero.vue
    <script setup>
    import { useI18n } from "vue-i18n";
    
    const { t } = useI18n();
    </script>
    
    <template>
      <h1>{{ t("home.hero.title") }}</h1>
    </template>
    
    Hero.vue
    <script setup>
    import { useIntlayer } from "vue-intlayer";
    
    const { title } = useIntlayer("hero");
    </script>
    
    <template>
      <h1>{{ title }}</h1>
    </template>
    

    ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Intlayer отслСТиваСт Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ обращСния ΠΊ полям ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ лишнСС Π΄ΠΎ сборки клиСнтских Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π½Π΄Π»Π°.

    ΠžΠΏΡ‹Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

    Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ² совмСстного размСщСния

    Π’ vue-i18n тСксты вынСсСны Π² обособлСнный ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ locales/. Intlayer располагаСт Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° нСпосрСдствСнно рядом с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ:

    locales/en.json
    {
      "hero": {
        "title": "Ship in every language"
      }
    }
    
    locales/ru.json
    {
      "hero": {
        "title": "ЗапускайтС Π½Π° любом языкС"
      }
    }
    
    Hero.vue
    <script setup>
    import { useI18n } from "vue-i18n";
    
    const { t } = useI18n();
    </script>
    
    <template>
      <h1>{{ t("hero.title") }}</h1>
    </template>
    
    Hero.content.ts
    import { t, type Dictionary } from "intlayer";
    
    export default {
      key: "hero",
      content: {
        title: t({
          en: "Ship in every language",
          ru: "ЗапускайтС Π½Π° любом языкС",
        }),
      },
    } satisfies Dictionary;
    
    Hero.vue
    <script setup>
    import { useIntlayer } from "vue-intlayer";
    
    const { title } = useIntlayer("hero");
    </script>
    
    <template>
      <h1>{{ title }}</h1>
    </template>
    

    ΠŸΡ€ΠΈ пСрСносС ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Hero.vue Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° пСрСмСщаСтся ΠΈΠ»ΠΈ удаляСтся автоматичСски.

    АвтодополнСниС ΠΏΡ€ΠΎΡ‚ΠΈΠ² строгой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹

    DefineLocaleMessage Π΄Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΏΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΉ схСмС. Но ΠΎΠ½ΠΎ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡ‚Ρƒ всСх ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ². ΠŸΡ€ΠΎΠΏΡƒΡΠΊ ΠΊΠ»ΡŽΡ‡Π° Π² ru.json Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ сборки TypeScript.

    Π’ Intlayer словари Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ строго. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ strictMode ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС сборки ΠΏΡ€ΠΈ отсутствии ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π² любом настроСнном языкС.

    Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для IDE ΠΈ ИИ

    Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒvue-i18nIntlayer
    Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ VS CodeΠ‘Ρ‚ΠΎΡ€ΠΎΠ½Π½Π΅Π΅ (i18n Ally)βœ… ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅
    Language Server (LSP)❌ ΠΠ΅Ρ‚βœ… ВстроСнный LSP
    MCP Server для ИИ❌ ΠΠ΅Ρ‚βœ… Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ MCP-сСрвСр
    Навыки Π°Π³Π΅Π½Ρ‚ΠΎΠ² (Skills)❌ ΠΠ΅Ρ‚βœ… Π“ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ
    Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ CMS❌ ΠΠ΅Ρ‚βœ… БСсплатная Open Source CMS

    ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°

    vue-i18n Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ встроСнной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ². Π€Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ Π½Π° внСшниС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π²Ρ€ΠΎΠ΄Π΅ Crowdin ΠΈΠ»ΠΈ Phrase.

    Intlayer ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ встроСнныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

    АвтодополнСниС Ρ‡Π΅Ρ€Π΅Π· Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ИИ (intlayer fill):

    ЗаполняСт Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ с использованиСм Π²Π°ΡˆΠΈΡ… API-ΠΊΠ»ΡŽΡ‡Π΅ΠΉ OpenAI, Anthropic, Mistral ΠΈΠ»ΠΈ Gemini.

    Автономная Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ CMS:

    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Intlayer CMS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ тСксты Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ с фиксациСй ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ прямо Π² Git.

    Бвободная лицСнзия:

    ВсС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.

    Когда vue-i18n ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½?

    Если ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ ТСстко завязана Π½Π° @nuxtjs/i18n, ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π΅ всСгда цСлСсообразна.

    ΠŸΡ€ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ использовании слоТных связанных сообщСний ΠΈΠ»ΠΈ нСстандартных ΠΏΡ€Π°Π²ΠΈΠ» форматирования.

    Если Ρ€Π°Π·ΠΌΠ΅Ρ€ клиСнтского Π±Π°Π½Π΄Π»Π° Π½Π΅ являСтся Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ.

    Как ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ vue-i18n?

    Intlayer ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ совмСстимости, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ сигнатуры Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ vue-i18n ΠΈ @nuxtjs/i18n (useI18n, $t, <i18n-t>). Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈΠ»ΠΈ composables, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами Π»Π΅Π³ΠΊΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π½Π° Π±Π°Π·Π΅ компилятора.

    Настройка выполняСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

    bash
    npx intlayer init --interactive
    

    Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:

    1. УстанавливаСт ΠΏΠ°ΠΊΠ΅Ρ‚ совмСстимости @intlayer/vue-i18n ΠΈΠ»ΠΈ @intlayer/nuxt-i18n.
    2. НастраиваСт алиасы сборщика (Vite ΠΈΠ»ΠΈ Nuxt), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ ΠΈ Ρ‚Π΅Π³ΠΈ Π² ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ Π²Π΅Π»ΠΈ Π½Π° Intlayer, позволяя ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ vue-i18n ΠΈΠ· package.json.
    3. МгновСнно Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ диагностику языкового сСрвСра (LSP), ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ 24-ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹ΠΉ AST-парсСр ΠΈΠ· клиСнтского Π±Π°Π½Π΄Π»Π° ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ сцСнарии ИИ-ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π±Π΅Π· глобального Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

    ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ инструкции ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π½Π°ΡˆΠΈΡ… руководствах:

    • ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ: БохраняйтС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° для vue-i18n ΠΈΠ»ΠΈ @nuxtjs/i18n.
    • Руководства ΠΏΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ: ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ JSON-Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ словари ΠΏΠΎ нашим инструкциям: с vue-i18n ΠΈΠ»ΠΈ с @nuxtjs/i18n.
    • Π“ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: ΠžΡΡ‚Π°Π²ΡŒΡ‚Π΅ vue-i18n Π² Ρ€Π°Π±ΠΎΡ‚Π΅, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ² Intlayer ΠΊ vue-i18n для строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ локального ИИ-ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°.

    ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ сайт Π½Π° ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ бСсплатного SEO-сканСра i18n:

    Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ

    ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

    Пока Π½Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π². Π‘ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, ΠΊΡ‚ΠΎ подСлится своими мыслями.

    ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ сообщСния

    ПослСдниС сообщСния