Автор:
    БозданиС:2025-09-22ПослСднСС обновлСниС:2025-09-23

    Новый Intlayer v7 - Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ?

    Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Intlayer v7! Π­Ρ‚ΠΎΡ‚ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· прСдставляСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, бСзопасности Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΎΠΏΡ‹Ρ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ основныС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ практичСскиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

    ОглавлСниС

    ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹

    • БтратСгия ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ для ускорСния сборок
    • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ гСнСрация Ρ‚ΠΈΠΏΠΎΠ² TypeScript с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, спСцифичными для Π»ΠΎΠΊΠ°Π»ΠΈ
    • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π±Π°Π½Π΄Π»Π°: Π»ΠΎΠΊΠ°Π»ΠΈ ΠΊΠ°ΠΊ строки вмСсто enum
    • НовыС Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ: prefix-no-default, prefix-all, no-prefix, search-params
    • Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ Π² соотвСтствии с GDPR с использованиСм localStorage ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    • Гибкая конфигурация хранСния: cookies, localStorage, sessionStorage ΠΈΠ»ΠΈ нСсколько ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ
    • Π Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π½Π΄Π»Π° Visual Editor ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ Π½Π° 30%
    • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ middleware
    • ОбновлСнноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ fill для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ управлСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ
    • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°
    • Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ для точности ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°
    • ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·Π°Ρ†ΠΈΡ для ускорСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ²
    • Π£ΠΌΠ½ΠΎΠ΅ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° Ρ‡Π°Π½ΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ AI контСкста

    ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для ускорСния сборок

    ВмСсто ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ сборки Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ esbuild ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сборкС, Π² вСрсии 7 Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° стратСгия ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, которая ускоряСт процСсс сборки.

    bash
    npx intlayer build
    

    Новая систСма ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ:

    • БохраняСт скомпилированныС Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
    • ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ измСнСния ΠΈ пСрСстраиваСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹
    • Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращаСт врСмя сборки (build time) для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

    TypeScript: ГСнСрация Ρ‚ΠΈΠΏΠΎΠ², спСцифичных для Π»ΠΎΠΊΠ°Π»ΠΈ

    Π’ΠΈΠΏΡ‹ TypeScript Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, обСспСчивая Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ устраняя ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ для всСх Π»ΠΎΠΊΠ°Π»Π΅ΠΉ.

    ПовСдСниС в v6:

    tsx
    const content = getIntlayer("my-title-content", "en");
    // typeof content = { title: "My title" } | { title: "Mon titre" } | { title: "Mi tΓ­tulo" }
    

    ПовСдСниС в v7:

    tsx
    const content = getIntlayer("my-title-content", "en");
    // typeof content = { title: "My title" }
    

    ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

    • Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² вашСй IDE
    • Π›ΡƒΡ‡ΡˆΠ°Ρ Ρ‚ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π±Π΅Π· смСшСния Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ локалями
    • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π° счёт ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ слоТности Ρ‚ΠΈΠΏΠΎΠ²

    ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π±Π°Π½Π΄Π»Π°: Π›ΠΎΠΊΠ°Π»ΠΈ ΠΊΠ°ΠΊ строки

    Π’ΠΈΠΏ Locales большС Π½Π΅ являСтся пСрСчислСниСм (enum), Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ поддаётся tree-shaking ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π΄ΡƒΠ²Π°Ρ‚ΡŒ ваш Π±Π°Π½Π΄Π» тысячами Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… записСй Π»ΠΎΠΊΠ°Π»Π΅ΠΉ.

    v6:

    typescript
    import { Locales } from "intlayer";
    // ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ всС Π»ΠΎΠΊΠ°Π»ΠΈ -> Π½Π΅ поддаётся tree-shaking
    
    const locale: Locales = Locales.ENGLISH;
    

    v7:

    typescript
    import { Locales, Locale } from "intlayer";
    // Π’ΠΈΠΏ строки -> ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ поддаётся tree-shaking
    
    const locale: Locale = Locales.ENGLISH;
    
    ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Locales большС Π½Π΅ являСтся пСрСчислСниСм (enum), Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ с Locales Π½Π° Locale, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ локаль Π² Π²ΠΈΠ΄Π΅ Ρ‚ΠΈΠΏΠ°.

    ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ смотритС Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

    НовыС Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ для большСй гибкости

    Π’ вСрсии 7 Π²Π²Π΅Π΄Π΅Π½Π° Сдиная конфигурация routing.mode, которая замСняСт ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ prefixDefault ΠΈ noPrefix, прСдоставляя Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ структурой URL.

    ДоступныС Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ

    • prefix-no-default (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ): Ρƒ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅Ρ‚ прСфикса, Ρƒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΎΠΊΠ°Π»Π΅ΠΉ прСфикс Π΅ΡΡ‚ΡŒ
      • /dashboard (en) ΠΈΠ»ΠΈ /fr/dashboard (fr)
    • prefix-all: Ρƒ всСх Π»ΠΎΠΊΠ°Π»Π΅ΠΉ Π΅ΡΡ‚ΡŒ прСфикс
      • /en/dashboard (en) ΠΈΠ»ΠΈ /fr/dashboard (fr)
    • no-prefix: НСт прСфиксов Π»ΠΎΠΊΠ°Π»ΠΈ Π² URL (локаль обрабатываСтся Ρ‡Π΅Ρ€Π΅Π· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅/Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ)
      • /dashboard для всСх Π»ΠΎΠΊΠ°Π»Π΅ΠΉ
    • search-params: Π›ΠΎΠΊΠ°Π»ΡŒ пСрСдаСтся ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ запроса
      • /dashboard?locale=en ΠΈΠ»ΠΈ /dashboard?locale=fr

    Базовая конфигурация

    typescript
    // intlayer.config.ts
    export default {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default", // ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
      },
    };
    

    БоотвСтствиС GDPR: Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² localStorage / cookies

    v7 удСляСт ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ localStorage Π² качСствС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° хранСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ вмСсто cookies. Π­Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ трСбования GDPR, избСгая нСобходимости ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ согласиС Π½Π° использованиС cookies для ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ.

    ΠžΠΏΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ хранСния

    НовоС ΠΏΠΎΠ»Π΅ routing.storage Ρ‚Π°ΠΊΠΆΠ΅ доступно Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ опциям middleware.cookieName ΠΈ middleware.serverSetCookie, прСдлагая Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ хранСния:

    typescript
    // ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅
    storage: false
    
    // ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ хранСния
    storage: 'cookie'
    storage: 'localStorage'
    storage: 'sessionStorage'
    
    // Cookie с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ
    storage: {
      type: 'cookie',
      name: 'custom-locale',
      domain: '.example.com',
      secure: true,
      sameSite: 'strict'
    }
    
    // localStorage с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ
    storage: {
      type: 'localStorage',
      name: 'custom-locale'
    }
    
    // НСсколько Ρ‚ΠΈΠΏΠΎΠ² хранСния для рСзСрвирования
    storage: ['cookie', 'localStorage']
    

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ GDPR

    Для производствСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ соотвСтствиС GDPR:

    typescript
    // intlayer.config.ts
    export default {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default",
        storage: [
          {
            type: "localStorage", // ОсновноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ (Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ согласия)
            name: "user-locale",
          },
          {
            type: "cookie", // Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² cookie (трСбуСтся согласиС)
            name: "user-locale",
            secure: true,
            sameSite: "strict",
            httpOnly: false,
          },
        ],
      },
    };
    

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с использованиСм React / Next.js:

    МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ глобально:

    typescript
    <IntlayerProvider isCookieEnabled={false}>
      <App />
    </IntlayerProvider>
    

    МоТно ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ локально для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ…ΡƒΠΊΠ°:

    ts
    const { setLocale } = useLocale({ isCookieEnabled: false });
    
    setLocale("en");
    

    ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΡƒΠΊΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с трСбованиями GDPR ΠΊ ΠΊΡƒΠΊΠΈ для вашСго ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ случая.

    Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€: ΠΏΠ°ΠΊΠ΅Ρ‚ стал Π½Π° 30% мСньшС

    ΠŸΠ°ΠΊΠ΅Ρ‚ Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Π±Ρ‹Π» ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ стал Π½Π° 30% мСньшС ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсиСй благодаря:

    • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°
    • УдалСнию Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… зависимостСй ΠΎΡ‚ основных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Intlayer
    • Π›ΡƒΡ‡ΡˆΠ΅ΠΉ tree-shaking ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

    Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±ΠΎΠ»Π΅Π΅ быстрой Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прилоТСния Π²ΠΎ врСмя выполнСния.

    АвтоматичСскоС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°: конфигурация formatCommand

    v7 Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΡ†ΠΈΡŽ formatCommand Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, позволяя Π²Π°ΠΌ автоматичСски Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ содСрТимого ΠΏΡ€ΠΈ ΠΈΡ… записи Intlayer. Π­Ρ‚ΠΎ обСспСчиваСт согласованный ΡΡ‚ΠΈΠ»ΡŒ ΠΊΠΎΠ΄Π° ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎ всСх Ρ„Π°ΠΉΠ»Π°Ρ… объявлСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°.

    Если Π½Π΅ установлСно, Intlayer попытаСтся автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ форматирования. ΠŸΡƒΡ‚Π΅ΠΌ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹: prettier, biome, eslint.

    ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

    ΠžΠΏΡ†ΠΈΡ formatCommand ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ строковый шаблон, Π³Π΄Π΅ {{file}} Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π½Π° фактичСский ΠΏΡƒΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π°:

    intlayer.config.ts
    export default {
      content: {
        formatCommand: 'bun x biome format "{{file}}" --write --log-level none',
      },
    };
    

    ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€Ρ‹

    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

    Using Biome:

    typescript
    formatCommand: 'bun x biome format "{{file}}" --write --log-level none';
    

    Using Prettier:

    typescript
    formatCommand: 'npx prettier --write "{{file}}" --log-level silent';
    

    Using ESLint:

    typescript
    formatCommand: 'npx eslint --fix "{{file}}" --quiet';
    

    Using Bun's built-in formatter:

    typescript
    formatCommand: 'bun format "{{file}}"';
    

    ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

    • БогласованноС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ВсС Ρ„Π°ΠΉΠ»Ρ‹ содСрТимого автоматичСски Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² соотвСтствии с рСкомСндациями стиля вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
    • ΠžΠΏΡ‹Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°: НСт нСобходимости Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ послС ΠΈΡ… создания Intlayer
    • Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹: Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ всС Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, примСняСмоС ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ содСрТимого
    • Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ CI/CD: Π€Π°ΠΉΠ»Ρ‹ содСрТимого ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ согласованноС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссах

    Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

    When Intlayer writes or updates a content declaration file (.content.ts, .content.js, etc.), it automatically runs the specified format command on the file. The {{file}} placeholder is replaced with the actual file path, and the command is executed in the project's base directory.

    Dictionary Configuration: Better organization and structure

    v7 прСдставляСт Π½ΠΎΠ²Ρ‹ΠΉ dedicated Ρ€Π°Π·Π΄Π΅Π» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ dictionary, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², связанных со словарСм, ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ содСрТимым.

    Новая структура ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ словаря

    Бвойство fill Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΎ ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° content Π² Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» dictionary, обСспСчивая Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ отвСтствСнности:

    ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ v6:

    intlayer.config.ts
    export default {
      content: {
        autoFill: "./{{fileName}}.content.json",
        contentDir: ["src"],
      },
    };
    

    ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ v7:

    intlayer.config.ts
    export default {
      content: {
        contentDir: ["src"],
      },
      dictionary: {
        fill: "./{{fileName}}.content.json",
      },
    };
    

    ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Π½ΠΎΠ²ΠΎΠΉ структуры

    • Π‘ΠΎΠ»Π΅Π΅ чСткая организация: ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Π΅ для словаря, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ сгруппированы вмСстС
    • Π›ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ отвСтствСнности: ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ содСрТимого ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со словарСм Ρ‡Π΅Ρ‚ΠΊΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹
    • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ: Π›Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, связанныС со словарСм
    • Будущая Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ: Π Π°Π·Π΄Π΅Π» словаря ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Π΅ для словаря
    • КомплСксноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ словарСм: Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ свойства, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ title, live, priority, tags, version ΠΈ description для создания ΠΈ управлСния Π½ΠΎΠ²Ρ‹ΠΌΠΈ словарями

    ИспользованиС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

    ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ словаря слуТит Π΄Π²ΡƒΠΌ основным цСлям:

    1. ЗначСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ создании Ρ„Π°ΠΉΠ»ΠΎΠ² объявлСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°
    2. ПовСдСниС ΠΏΡ€ΠΈ отсутствии значСния: ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ поля Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, позволяя Π²Π°ΠΌ глобально ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ словаря

    Π Π°Π·Π΄Π΅Π» словаря Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ комплСксныС свойства для управлСния словарСм:

    • fill: ПовСдСниС автозаполнСния ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°
    • title: Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π½ΠΎΠ²Ρ‹Ρ… словарСй
    • live: ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ синхронизации Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ
    • priority: ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ словаря
    • tags: Π’Π΅Π³ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°
    • version: Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСрсиями для ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ словаря
    • description: ОписаниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°

    Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… объявлСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ см. ДокумСнтация ΠΏΠΎ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°.

    Команда fill: ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ управлСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ

    v7 Π²Π²ΠΎΠ΄ΠΈΡ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ fill, обСспСчивая Π±ΠΎΠ»Π΅Π΅ прСдсказуСмоС ΠΈ Π³ΠΈΠ±ΠΊΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ:

    НовоС повСдСниС fill

    • fill: true. ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ для всСх Π»ΠΎΠΊΠ°Π»Π΅ΠΉ
    • fill: "path/to/file". ЗаполняСт ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Π΅Π· измСнСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°
    • fill: false. ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎ-Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

    Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° слоТных структур ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°

    Команда fill Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ слоТныС структуры Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ:

    • БоставныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹: Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹
    • ДСструктурированный ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚: ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ дСструктуризации
    • Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ссылки: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° Π² слоТных иСрархиях
    • ДинамичСскиС структуры ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°: ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ с условными ΠΈΠ»ΠΈ вычисляСмыми свойствами

    ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

    • Π‘ΠΎΠ»Π΅Π΅ ясноС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅: ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΠΎΠ»Π΅Π΅ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ измСняСтся
    • Π›ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅: Π€Π°ΠΉΠ»Ρ‹ с ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ²
    • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс: Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ большС контроля Π½Π°Π΄ Ρ‚Π΅ΠΌ, Π³Π΄Π΅ хранятся ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹
    • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° слоТных структур: ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° слоТных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° с мноТСством взаимосвязанных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования

    typescript
    // ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» со всСми локалями
    const content = {
      key: "example",
      fill: true, // ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ этот Ρ„Π°ΠΉΠ»
      content: {
        title: "Hello World",
      },
    };
    
    // Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Π΅Π· измСнСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°
    const content = {
      key: "example",
      fill: "./translations.json", // Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚/обновляСт translations.json
      content: {
        title: "Hello World",
      },
    };
    
    // ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎ-Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
    const content = {
      key: "example",
      fill: false, // Авто-Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ
      content: {
        title: "Hello World",
      },
    };
    
    // БлоТная структура ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° с составными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ
    const sharedContent = {
      buttons: {
        save: "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ", // Кнопка ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ
        cancel: "ΠžΡ‚ΠΌΠ΅Π½Π°", // Кнопка ΠΎΡ‚ΠΌΠ΅Π½Ρ‹
      },
    };
    
    const content = {
      key: "complex-example",
      fill: true,
      content: {
        // Бсылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹
        sharedContent,
    
        // ДСструктурированный ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚
        ...sharedContent,
    
        // Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ссылки
        sections: [
          {
            ...sharedContent.buttons,
            header: "Π Π°Π·Π΄Π΅Π» 1",
          },
        ],
      },
    };
    

    ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌΠΈ

    v7 Π²Π²ΠΎΠ΄ΠΈΡ‚ нСсколько ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ ΠΈ эффСктивным:

    ΠŸΠΎΠ»Π½Ρ‹Π΅ обновлСния Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°

    БистСма Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ обновляСт Ρ„Π°ΠΉΠ»Ρ‹ .content.{ts,js,cjs,mjs}, Π° Π½Π΅ частично, обСспСчивая:

    • Π¦Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…: Полная ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ частичныС обновлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚ΡŒ содСрТимоС
    • Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ: ВсС Π»ΠΎΠΊΠ°Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ, поддСрТивая ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ
    • ΠΠ°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ: Π‘Π½ΠΈΠΆΠ°Π΅Ρ‚ риск Π½Π΅ΠΏΠΎΠ»Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² содСрТимого

    Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ

    НовыС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ содСрТимого Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… ΠΈ ΠΈΠ·Π±Π΅Π³Π°ΡŽΡ‚ срыва всСго процСсса заполнСния, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· запросов Π½Π΅ удался.

    ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·Π°Ρ†ΠΈΡ для ускорСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

    ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ запуском, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ускоряСт процСсс.

    Π£ΠΌΠ½ΠΎΠ΅ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° части для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²

    ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ стратСгии разбиСния ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ большиС Ρ„Π°ΠΉΠ»Ρ‹ содСрТимого, Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ контСкстныС ΠΎΠΊΠ½Π° ИИ:

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса

    typescript
    // Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ„Π°ΠΉΠ» содСрТимого автоматичСски разбиваСтся Π½Π° части
    const content = {
      key: "large-documentation",
      fill: true,
      content: {
        // Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ содСрТимоС автоматичСски разбиваСтся Π½Π° части для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ИИ
        introduction: "..." // болСС 5000 символов
        sections: [
          // НСсколько Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²
        ]
      }
    };
    

    БистСма автоматичСски:

    1. АнализируСт Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ структуру содСрТимого
    2. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ содСрТимоС Π½Π° части
    3. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ части ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ
    4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ ΠΈ ΠΏΡ€ΠΈ нСобходимости повторяСт ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ
    5. ВосстанавливаСт ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

    Π—Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ с вСрсии v6

    Π£Π΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

    • middleware.cookieName: Π·Π°ΠΌΠ΅Π½Ρ‘Π½ Π½Π° routing.storage
    • middleware.serverSetCookie: Π·Π°ΠΌΠ΅Π½Ρ‘Π½ Π½Π° routing.storage
    • middleware.prefixDefault: Π·Π°ΠΌΠ΅Π½Ρ‘Π½ Π½Π° routing.mode
    • middleware.noPrefix: Π·Π°ΠΌΠ΅Π½Ρ‘Π½ Π½Π° routing.mode

    НовыС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

    • editor.formatCommand: Новый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для автоматичСского форматирования ΠΊΠΎΠ΄Π° Ρ„Π°ΠΉΠ»ΠΎΠ² содСрТимого

    БопоставлСниС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ

    БопоставлСниС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ

    ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ v6ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ v7
    autoFill: xxxfill: xxx
    prefixDefault: falsemode: 'prefix-no-default'
    prefixDefault: truemode: 'prefix-all'
    noPrefix: truemode: 'no-prefix'
    cookieName: 'my-locale'storage: { type: 'cookie', name: 'my-locale' }
    serverSetCookie: 'never'storage: false ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ cookie ΠΈΠ· массива storage`

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ

    Π”ΠΎ (v6):

    typescript
    export default {
      middleware: {
        headerName: "x-intlayer-locale",
        cookieName: "intlayer-locale",
        prefixDefault: false,
        basePath: "",
        serverSetCookie: "always",
        noPrefix: false,
      },
    };
    

    ПослС (v7):

    typescript
    export default {
      routing: {
        mode: "prefix-no-default",
        storage: "localStorage", // ΠΈΠ»ΠΈ 'cookie', Ссли трСбуСтся Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² cookie
        headerName: "x-intlayer-locale",
        basePath: "",
      },
    };
    

    БоотвСтствиС содСрТимого словаря

    Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ словаря v6Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ словаря v7
    autoFill: xxxfill: xxx

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ

    Π”ΠΎ (v6):

    typescript
    const content = {
      key: "example",
      autoFill: true, // ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ этот Ρ„Π°ΠΉΠ»
      content: {
        title: "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€",
      },
    };
    

    ПослС (v7):

    typescript
    const content = {
      key: "example",
      fill: true, // ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ этот Ρ„Π°ΠΉΠ»
      content: {
        title: "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€",
      },
    };
    

    Π—Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ с v5 Π½Π° v6

    ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ смотритС Π² Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ°Ρ… ΠΏΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ с v5 Π½Π° v6.

    ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки