Автор:
    БозданиС:2026-04-24ПослСднСС обновлСниС:2026-08-30

    ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚Π΅ ваш сайт Astro + Vue с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Intlayer | Π˜Π½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ (i18n)

    ide.intlayer.org
    intlayer-astro-template.vercel.app

    Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

    ΠŸΠΎΡ‡Π΅ΠΌΡƒ Intlayer Π»ΡƒΡ‡ΡˆΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²?

    По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с основными Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ astro-i18n ΠΈΠ»ΠΈ i18next, Intlayer прСдставляСт собой Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ со встроСнными оптимизациями, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ:

    Intlayer ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для идСальной Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Astro, прСдлагая ΠΌΠ½ΠΎΠ³ΠΎΡΠ·Ρ‹Ρ‡Π½ΡƒΡŽ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΊΠ°Ρ€Ρ‚Ρƒ сайта ΠΈ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (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 Π² Astro + Vue

    ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π¨Π°Π±Π»ΠΎΠ½ прилоТСния Π½Π° GitHub.

    1. Установка зависимостСй

      УстановитС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ вашСго ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²:

      bash
      npx intlayer init --interactive
      
      Ρ„Π»Π°Π³ --interactive Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ intlayer-cli init, Ссли Π²Ρ‹ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ ИИ-Π°Π³Π΅Π½Ρ‚ΠΎΠΌ.
      Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ Π²Π°ΡˆΡƒ срСду ΠΈ установит Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. НапримСр:
      bash
      npm install intlayer astro-intlayer vue vue-intlayer @astrojs/vue
      
      • intlayer Основной ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ инструмСнты ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌΠΈ, объявлСниСм ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, транспиляциСй ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ CLI.

      • astro-intlayer Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ для Astro для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Intlayer с Π±Π°Π½Π΄Π»Π΅Ρ€ΠΎΠΌ Vite, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ПО для опрСдСлСния ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, управлСния ΠΊΡƒΠΊΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ URL.

      • vue Основной ΠΏΠ°ΠΊΠ΅Ρ‚ Vue.

      • vue-intlayer ΠŸΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Intlayer с прилоТСниями Vue. Он прСдоставляСт installIntlayer, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΠ±Π»Ρ‹ (composables) useIntlayer ΠΈ useLocale для ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Vue.

      • @astrojs/vue ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ интСграция Astro, которая позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ острова (islands) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Vue.

    2. Настройка вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

      Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для настройки языков вашСго прилоТСния:

      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, пСрСнаправлСния middleware, названия ΠΊΡƒΠΊΠΈ, располоТСниС ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π²Π°ΡˆΠΈΡ… объявлСний ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈ Intlayer Π² консоли ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список доступных ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² см. Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.
    3. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Intlayer Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Astro

      Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠ»Π°Π³ΠΈΠ½ intlayer ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ Vue Π² Π²Π°ΡˆΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ.

      astro.config.ts
      // @ts-check
      
      import { intlayer } from "astro-intlayer";
      import vue from "@astrojs/vue";
      import { defineConfig } from "astro/config";
      
      // https://astro.build/config
      export default defineConfig({
        integrations: [intlayer(), vue()],
      });
      
      Плагин ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ intlayer() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Intlayer с Astro. Он обСспСчиваСт сборку Ρ„Π°ΠΉΠ»ΠΎΠ² объявлСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΈ отслСТиваСт ΠΈΡ… измСнСния Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Он опрСдСляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния Intlayer Π²Π½ΡƒΡ‚Ρ€ΠΈ прилоТСния Astro. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ прСдоставляСт псСвдонимы для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
      Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ vue() позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ острова ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Vue Ρ‡Π΅Ρ€Π΅Π· client:only="vue".
    4. ОбъявлСниС ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°

      Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈ управляйтС объявлСниями ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° для хранСния ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ²:

      src/app.content.ts
      import { t, type Dictionary } from "intlayer";
      
      const appContent = {
        key: "app",
        content: {
          title: t({
            en: "Hello World",
            fr: "Bonjour le monde",
            es: "Hola mundo",
            ru: "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€",
          }),
        },
      } satisfies Dictionary;
      
      export default appContent;
      
      Π’Π°ΡˆΠΈ объявлСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² любом мСстС вашСго прилоТСния, Ссли ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ contentDir (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ./src) ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ Ρ„Π°ΠΉΠ»Π° объявлСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ .content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
      Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ см. Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ объявлСнию ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°.
    5. ИспользованиС ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π² Astro

      Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ словари Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Ρ„Π°ΠΉΠ»Π°Ρ… .astro, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ основныС Ρ…Π΅Π»ΠΏΠ΅Ρ€Ρ‹, экспортируСмыС ΠΈΠ· intlayer. Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ слСдуСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ SEO-ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ hreflang ΠΈ каноничСскиС ссылки, Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ страницу ΠΈ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ остров Vue для ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

      src/pages/[...locale]/index.astro
      ---
      import {
        getIntlayer,
        getLocaleFromPath,
        getLocalizedUrl,
        getHTMLTextDir,
        getPrefix,
        localeMap,
        defaultLocale,
        type LocalesValues,
      } from "intlayer";
      import VueIsland from "../../components/vue/VueIsland.vue";
      
      export const getStaticPaths = () => {
        return localeMap(({ locale }) => ({
          params: { locale: getPrefix(locale).localePrefix },
        }));
      };
      
      const locale = getLocaleFromPath(Astro.url.pathname) as LocalesValues;
      const { title } = getIntlayer("app", locale);
      ---
      
      <!doctype html>
      <html lang={locale} dir={getHTMLTextDir(locale)}>
        <head>
          <meta charset="utf-8" />
          <meta name="viewport" content="width=device-width" />
          <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
          <title>{title}</title>
      
          <!-- ΠšΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠ°Ρ ссылка: Π‘ΠΎΠΎΠ±Ρ‰Π°Π΅Ρ‚ поисковым систСмам, какая вСрсия страницы являСтся основной -->
          <link
            rel="canonical"
            href={new URL(getLocalizedUrl(Astro.url.pathname, locale), Astro.site)}
          />
      
          <!-- Hreflang: Π‘ΠΎΠΎΠ±Ρ‰Π°Π΅Ρ‚ Google ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ всСх Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… вСрсий -->
          {
            localeMap(({ locale: mapLocale }) => (
              <link
                rel="alternate"
                hreflang={mapLocale}
                href={new URL(
                  getLocalizedUrl(Astro.url.pathname, mapLocale),
                  Astro.site
                )}
              />
            ))
          }
      
          <!-- x-default: Π Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ языками -->
          <link
            rel="alternate"
            hreflang="x-default"
            href={new URL(
              getLocalizedUrl(Astro.url.pathname, defaultLocale),
              Astro.site
            )}
          />
        </head>
        <body>
          <!-- ΠžΡΡ‚Ρ€ΠΎΠ² Vue отрисовываСт вСсь ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ языков -->
          <VueIsland locale={locale} client:only="vue" />
        </body>
      </html>
      

      ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ: Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅, зависит ΠΎΡ‚ настройки middleware.routing Π² вашСм intlayer.config.ts:

      • prefix-no-default (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ): БохраняСт локаль ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΊΠΎΡ€Π½Π΅ (Π±Π΅Π· прСфикса) ΠΈ добавляСт прСфиксы ΠΊ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ [...locale] для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всСх случаСв.
      • prefix-all: ВсС URL ΠΈΠΌΠ΅ΡŽΡ‚ прСфикс языка. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартный [locale], Ссли Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.
      • search-param ΠΈΠ»ΠΈ no-prefix: Папка Π»ΠΎΠΊΠ°Π»ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Π°. Π›ΠΎΠΊΠ°Π»ΡŒ обрабатываСтся Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ поиска ΠΈΠ»ΠΈ ΠΊΡƒΠΊΠΈ.
    6. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠžΡΡ‚Ρ€ΠΎΠ²Π° Vue

      Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ острова, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Vue ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ локаль, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ сСрвСром. НСобходимо Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ installIntlayer, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ Intlayer Π² экзСмплярС Vue ΠΏΠ΅Ρ€Π΅Π΄ использованиСм Π»ΡŽΠ±Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΠ±Π»ΠΎΠ².

      src/components/vue/VueIsland.vue
      <script setup lang="ts">
      import { ref, getCurrentInstance } from "vue";
      import { useIntlayer, useLocale, installIntlayer } from "vue-intlayer";
      import { getLocalizedUrl, getLocaleName, type LocalesValues } from "intlayer";
      
      const props = defineProps<{ locale: LocalesValues }>();
      
      const app = getCurrentInstance()?.appContext.app;
      if (app) {
        installIntlayer(app, { locale: props.locale });
      }
      
      const {
        locale: currentLocale,
        availableLocales,
        setLocale,
      } = useLocale({
        onLocaleChange: (newLocale: LocalesValues) => {
          window.location.href = getLocalizedUrl(window.location.pathname, newLocale);
        },
      });
      
      const count = ref(0);
      const { title } = useIntlayer("app");
      </script>
      
      <template>
        <div>
          <h1>{{ title }}</h1>
          <!-- ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ языка отрисовываСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ шаблона острова -->
          <div class="locale-switcher">
            <span class="switcher-label">Π‘ΠΌΠ΅Π½ΠΈΡ‚ΡŒ язык:</span>
            <div class="locale-buttons">
              <button
                v-for="localeItem in availableLocales"
                :key="localeItem"
                :class="['locale-btn', { active: localeItem === currentLocale }]"
                :disabled="localeItem === currentLocale"
                @click="setLocale(localeItem)"
              >
                <span class="ls-own-name">{{ getLocaleName(localeItem) }}</span>
                <span class="ls-current-name">{{
                  getLocaleName(localeItem, currentLocale)
                }}</span>
                <span class="ls-code">{{ localeItem.toUpperCase() }}</span>
              </button>
            </div>
          </div>
        </div>
      </template>
      
      ΠŸΡ€ΠΎΠΏ locale пСрСдаСтся со страницы Astro (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ сСрвСром) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ installIntlayer, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Ρ‘ локалью ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для всСх ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΠ±Π»ΠΎΠ² Π² Π΄Π΅Ρ€Π΅Π²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².
    7. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ языков

      ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ языков встроСн нСпосрСдствСнно Π² шаблон острова Vue (ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π¨Π°Π³Π΅ 6). Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ useLocale ΠΈΠ· vue-intlayer ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ URL, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ язык:

      src/components/vue/VueIsland.vue
      <script setup lang="ts">
      import { useLocale } from "vue-intlayer";
      import { getLocalizedUrl, getLocaleName, type LocalesValues } from "intlayer";
      
      // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π° ΠΆΠ΅ настройка props/app, Ρ‡Ρ‚ΠΎ ΠΈ Π² Π¨Π°Π³Π΅ 6 Π²Ρ‹ΡˆΠ΅...
      
      const {
        locale: currentLocale,
        availableLocales,
        setLocale,
      } = useLocale({
        onLocaleChange: (newLocale: LocalesValues) => {
          // ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΏΠΎ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ URL ΠΏΡ€ΠΈ смСнС языка
          window.location.href = getLocalizedUrl(window.location.pathname, newLocale);
        },
      });
      </script>
      
      <template>
        <div class="locale-switcher">
          <span class="switcher-label">Π‘ΠΌΠ΅Π½ΠΈΡ‚ΡŒ язык:</span>
          <div class="locale-buttons">
            <button
              v-for="localeItem in availableLocales"
              :key="localeItem"
              :class="['locale-btn', { active: localeItem === currentLocale }]"
              :disabled="localeItem === currentLocale"
              @click="setLocale(localeItem)"
            >
              <span class="ls-own-name">{{ getLocaleName(localeItem) }}</span>
              <span class="ls-current-name">{{
                getLocaleName(localeItem, currentLocale)
              }}</span>
              <span class="ls-code">{{ localeItem.toUpperCase() }}</span>
            </button>
          </div>
        </div>
      </template>
      

      ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ состояния: ИспользованиС onLocaleChange для пСрСнаправлСния Ρ‡Π΅Ρ€Π΅Π· window.location.href Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ посСщСниС Π½ΠΎΠ²ΠΎΠ³ΠΎ языкового URL, позволяя middleware Intlayer ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΡƒΠΊΠΈ языка ΠΈ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… посСщСний.

    8. Sitemap ΠΈ Robots.txt

      Intlayer прСдоставляСт ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ для динамичСского создания Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚ сайта ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² robots.txt.

      Sitemap

      Intlayer поставляСтся со встроСнным Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°Ρ€Ρ‚Ρ‹ сайта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ сайта для вашСго прилоТСния. Он ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ ΠΈ добавляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ для поисковых систСм.

      БоздаваСмая Intlayer ΠΊΠ°Ρ€Ρ‚Π° сайта ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ пространство ΠΈΠΌΠ΅Π½ xhtml:link (Hreflang XML Extensions). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ стандартных Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠ°Ρ€Ρ‚ сайта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ просто ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ прямыС URL-адрСса, Intlayer автоматичСски создаСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ двусторонниС связи ΠΌΠ΅ΠΆΠ΄Ρƒ всСми языковыми вСрсиями страницы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, /about, /about?lang=fr ΠΈ /about?lang=es). Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ поисковыС систСмы Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ ΡΠ·Ρ‹ΠΊΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

      Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ src/pages/sitemap.xml.ts для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ сайта, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ всС ваши Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹.

      src/pages/sitemap.xml.ts
      import type { APIRoute } from "astro";
      import { generateSitemap, type SitemapUrlEntry } from "intlayer";
      
      const pathList: SitemapUrlEntry[] = [
        { path: "/", changefreq: "daily", priority: 1.0 },
        { path: "/about", changefreq: "monthly", priority: 0.7 },
      ];
      
      const SITE_URL = import.meta.env.SITE ?? "http://localhost:4321";
      
      export const GET: APIRoute = async ({ site }) => {
        const xmlOutput = generateSitemap(pathList, { siteUrl: SITE_URL });
      
        return new Response(xmlOutput, {
          headers: { "Content-Type": "application/xml" },
        });
      };
      

      Robots.txt

      Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ src/pages/robots.txt.ts для управлСния сканированиСм поисковыми систСмами.

      src/pages/robots.txt.ts
      import type { APIRoute } from "astro";
      import { getMultilingualUrls } from "intlayer";
      
      const getAllMultilingualUrls = (urls: string[]) =>
        urls.flatMap((url) => Object.values(getMultilingualUrls(url)) as string[]);
      
      const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);
      
      export const GET: APIRoute = ({ site }) => {
        const robotsTxt = [
          "User-agent: *",
          "Allow: /",
          ...disallowedPaths.map((path) => `Disallow: ${path}`),
          "",
          `Sitemap: ${new URL("/sitemap.xml", site).href}`,
        ].join("\n");
      
        return new Response(robotsTxt, {
          headers: { "Content-Type": "text/plain" },
        });
      };
      
    9. Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ содСрТимого Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

      ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ

      Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ кодовая Π±Π°Π·Π°, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ тысяч Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

      Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ этот процСсс, Intlayer ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ компилятор / экстрактор для прСобразования Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ извлСчСния содСрТимого.

      Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» compiler Π² ваш Ρ„Π°ΠΉΠ» intlayer.config.ts:

      intlayer.config.ts
      import { type IntlayerConfig } from "intlayer";
      
      const config: IntlayerConfig = {
        // ... ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ вашСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
        compiler: {
          /**
           * Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ компилятор.
           */
          enabled: true,
      
          /**
           * ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΡƒΡ‚ΡŒ ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ
           */
          output: ({ fileName, extension }) => `./${fileName}${extension}`,
      
          /**
           * Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ послС прСобразования. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, компилятор ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для прСобразования прилоТСния, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.
           */
          saveComponents: false,
      
          /**
           * ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ ΠΊΠ»ΡŽΡ‡Π° словаря
           */
          dictionaryKeyPrefix: "",
        },
      };
      
      export default config;
      

      ЗапуститС экстрактор для прСобразования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ извлСчСния содСрТимого

      bash
      npx intlayer extract
      
      Since v9, the intlayerCompiler is included in the intlayer plugin. So you don't need to add it manually.

      ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ваш vite.config.ts, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ intlayerCompiler:

      vite.config.ts
      import { defineConfig } from "vite";
      import { intlayer, intlayerCompiler } from "vite-intlayer";
      
      export default defineConfig({
        plugins: [
          intlayer(),
          intlayerCompiler(), // Adds the compiler plugin
        ],
      });
      
      bash
      npm run build # Или npm run dev
      

    Настройка TypeScript

    Intlayer ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами TypeScript ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ.

    АвтодополнСниС

    Ошибка ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°

    Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ваша конфигурация TypeScript Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹.

    tsconfig.json
    {
      // ... Π’Π°ΡˆΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ TypeScript
      include: [
        // ... Π’Π°ΡˆΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ TypeScript
        ".intlayer/**/*.ts", // Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹
      ],
    }
    

    Настройка Git

    РСкомСндуСтся ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, созданныС Intlayer. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΡ… добавлСния Π² ваш Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

    Для этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ инструкции Π² ваш Ρ„Π°ΠΉΠ» .gitignore:

    bash
    # Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, созданныС Intlayer
    .intlayer
    

    Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для VS Code

    Для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ процСсса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Intlayer Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Intlayer для VS Code.

    Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· VS Code Marketplace

    Π­Ρ‚ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ прСдоставляСт:

    • АвтодополнСниС для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°.
    • ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ошибок Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ².
    • ВстроСнный прСдпросмотр ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°.
    • БыстрыС дСйствия для Π»Π΅Π³ΠΊΠΎΠ³ΠΎ создания ΠΈ обновлСния ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ².

    Для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± использовании Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ см. Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Intlayer для VS Code.

    Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ шаги

    Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈΠ»ΠΈ вынСсти ваш ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π²ΠΎ внСшнюю CMS.

    Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

    ВстроСнная опция i18n Astro ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ прСфиксы Π»ΠΎΠΊΠ°Π»Π΅ΠΉ ΠΈ Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚Ρ‹, Π½ΠΎ Π½Π΅ сам ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚, поэтому Π²Π°ΠΌ всё Π΅Ρ‰Ρ‘ Π½ΡƒΠΆΠ΅Π½ слой сообщСний, Π° остров добавляСт Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: остров выполняСт Vue, Π° Π½Π΅ Astro.

    • Astro i18n плюс написанныС Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ словари с vue-i18n Π²Π½ΡƒΡ‚Ρ€ΠΈ острова: Π΄Π²Π° источника ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΠ±Ρ‰Π΅ΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.
    • Intlayer: ΠΎΠ΄ΠΈΠ½ слой ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° для ΠΎΠ±ΠΎΠΈΡ…. astro-intlayer ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ страницы .astro, Π° vue-intlayer ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ острова Vue, читая ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ объявлСния.

    ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ надпись ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΈ Π½Π° статичСской страницС, ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ островС - Π²ΠΎΡ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ здСсь Π΅Π΄ΠΈΠ½Ρ‹ΠΉ слой ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. Π‘ΠΌ. ΠΏΠΎΡ‡Π΅ΠΌΡƒ Intlayer.

    Π“ΠΎΡ€Π°Π·Π΄ΠΎ мСньшС, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π½Π° основС пространств ΠΈΠΌΡ‘Π½, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ страница Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ Astro рСндСрятся Π²ΠΎ врСмя сборки, поэтому ΠΎΠ½ΠΈ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ HTML ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ словаря; ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ острова. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π²ΠΎ врСмя сборки Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π² Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ записи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Π° динамичСскиС словари Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎ локалям. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ Intlayer сокращаСт Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π½Π΄Π»Π° ΠΈ страницы Π΄ΠΎ 50%. Π‘ΠΌ. ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Π±Π°Π½Π΄Π»Π° ΠΈ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ.

    Π’ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ руководству ΠΏΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ с vue-i18n, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСнСсти ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠΈΠ³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ постСпСнно: ΠΏΠ»Π°Π³ΠΈΠ½ синхронизации 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 ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Тёстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ строки, с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ для статичСских ΠΊΠ»ΡŽΡ‡Π΅ΠΉ словаря ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°.