Автор:
    БозданиС:2025-03-13ПослСднСС обновлСниС:2026-09-27

    АвтоматичСскоС Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² объявлСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ²

    АвтоматичСскоС Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² объявлСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π² вашСй CI это способ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

    ПониманиС повСдСния

    Команда fill Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π° Ρ€Π΅ΠΆΠΈΠΌΠ°:

    • Complete: АвтоматичСски заполняСт всС Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰Π΅Π΅ содСрТимоС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ», Ссли ΠΎΠ½ ΡƒΠΊΠ°Π·Π°Π½. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ complete пропустит ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ содСрТимого, Ссли ΠΎΠ½ΠΎ ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½ΠΎ.
    • Review: АвтоматичСски заполняСт всС содСрТимоС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ссли ΠΎΠ½ ΡƒΠΊΠ°Π·Π°Π½.

    Команда fill Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ всС ваши Ρ„Π°ΠΉΠ»Ρ‹ объявлСния содСрТимого Π»ΠΎΠΊΠ°Π»ΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ вашС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ содСрТимоС ΠΈΠ· CMS. CMS Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ собствСнноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌΠΈ. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ @intlayer/sync-json-plugin, Intlayer ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ JSON Π² Ρ„Π°ΠΉΠ»Ρ‹ объявлСния содСрТимого Π»ΠΎΠΊΠ°Π»ΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ fill.

    НовыС сгСнСрированныС Ρ„Π°ΠΉΠ»Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ filled Π² качСствС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… словаря. Π­Ρ‚Π° инструкция Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Intlayer для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π» Π»ΠΈ Ρ„Π°ΠΉΠ» автоматичСски Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, ΠΈ пропустит этот Ρ„Π°ΠΉΠ» ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°, Ссли ΠΎΠ½Π° присутствуСт.

    Intlayer Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ для автоматичСского заполнСния:

    • Из вашСго .content.{ts|js|json} β†’ инструкция fill
    • Из вашСго Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ .intlayer.config.ts β†’ инструкция dictionary.fill
    • По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true

    Для Ρ„Π°ΠΉΠ»ΠΎΠ² объявлСния содСрТимого для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ инструкция true Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π½Π° ./{{fileName}}.fill.content.json. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» объявлСния содСрТимого для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ содСрТимоС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ».

    ПовСдСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

    По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ fill установлСно Π² true глобально, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Intlayer Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сам Ρ„Π°ΠΉΠ». Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ нСсколькими способами:

    Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

    1. fill: true (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) - АвтоматичСски Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всС Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ»
    2. fill: false - ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ автоматичСскоС Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ для этого Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°
    3. fill: "./relative/path/to/file" - Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ/ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Π΅Π· рСдактирования Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ, ΡƒΠΊΠ°Π·Π°Π² ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ Π½Π° основС располоТСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°
    4. fill: "/absolute/path/to/file" - Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ/ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Π΅Π· рСдактирования Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ, ΡƒΠΊΠ°Π·Π°Π² ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ Π½Π° основС располоТСния Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (ΠΏΠΎΠ»Π΅ baseDir Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ .intlayer.config.ts)
    5. fill: "C:\absolute\path\to\file" - Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ/ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Π΅Π· рСдактирования Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ, ΡƒΠΊΠ°Π·Π°Π² Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ Π½Π° основС вашСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы
    6. fill: { [key in Locales]?: string } - Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ/ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ

    ИзмСнСния повСдСния в v7

    Π’ v7 ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ fill Π±Ρ‹Π»ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ:

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

    ΠŸΡ€ΠΈ использовании ΠΎΠΏΡ†ΠΈΠΈ ΠΏΡƒΡ‚ΠΈ для записи Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ» ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ заполнСния Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ master-slave ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ объявлСния содСрТимого. Основной Ρ„Π°ΠΉΠ» (master) слуТит источником истины, ΠΈ ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Intlayer автоматичСски ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ эти измСнСния ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ (Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌ) Ρ„Π°ΠΉΠ»Π°ΠΌ объявлСния, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² ΠΏΡƒΡ‚ΠΈ.

    ΠšΠ°ΡΡ‚ΠΎΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠΎ локалям

    Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠ°ΡΡ‚ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

    intlayer.config.ts
    const config: IntlayerConfig = {
      content: {
        internationalization: {
          locales: [Locales.ENGLISH, Locales.FRENCH, Locales.POLISH],
          defaultLocale: Locales.ENGLISH,
          requiredLocales: [Locales.ENGLISH], // РСкомСндуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Property 'pl' is missing in type '{ en: string; xxx } on your t function if
        },
      },
      dictionary: {
        fill: {
          en: true, // Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» для английского языка
          fr: "./translations/fr.json", // Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для французского языка
          es: false, // ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ для испанского языка
        },
      },
    };
    

    Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ повСдСния заполнСния для Ρ€Π°Π·Π½Ρ‹Ρ… Π»ΠΎΠΊΠ°Π»Π΅ΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

    src/components/example/example.content.ts
    import { Locales, type Dictionary } from "intlayer";
    
    const exampleContent = {
      key: "example",
      locale: Locales.ENGLISH,
      fill: "./example.content.json",
      content: {
        contentExample: "This is an example of content",
      },
    } satisfies Dictionary;
    
    export default exampleContent;
    

    Π’ΠΎΡ‚ Ρ„Π°ΠΉΠ» объявлСния содСрТимого для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ с использованиСм инструкции fill.

    Π—Π°Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

    bash
    npx intlayer fill --file 'src/components/example/example.content.ts'
    

    Intlayer автоматичСски создаст ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» объявлСния Π² src/components/example/example.content.json, заполняя всС Π»ΠΎΠΊΠ°Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² основном Ρ„Π°ΠΉΠ»Π΅.

    src/components/example/example.content.json
    {
      "key": "example",
      "content": {
        "contentExample": {
          "nodeType": "translation",
          "translation": {
            "fr": "Ceci est un exemple de contenu",
            "es": "Este es un ejemplo de contenido",
          },
        },
      },
    }
    

    ПослС этого ΠΎΠ±Π° Ρ„Π°ΠΉΠ»Π° объявлСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, доступный с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартного Ρ…ΡƒΠΊΠ° useIntlayer("example") (react) / ΠΊΠΎΠΌΠΏΠΎΠ·Π°Π±Π»Π° (vue).

    Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ конфигурация

    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ автозаполнСния Π² Ρ„Π°ΠΉΠ»Π΅ intlayer.config.ts.

    intlayer.config.ts
    import { type IntlayerConfig, Locales } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
        defaultLocale: Locales.ENGLISH,
        requiredLocales: [Locales.ENGLISH, Locales.FRENCH],
      },
      dictionary: {
        // АвтогСнСрация ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² для всСх словарСй
        fill: "./{{fileName}}Filled.content.ts",
        //
        // fill: "/messages/{{locale}}/{{key}}/{{fileName}}.content.json",
        //
        // fill: true, // автогСнСрация ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² для всСх словарСй, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ использовании "./{{fileName}}.content.json"
        //
        // fill: {
        //   en: "./{{fileName}}.en.content.json",
        //   fr: "./{{fileName}}.fr.content.json",
        //   es: "./{{fileName}}.es.content.json",
        // },
      },
    };
    
    export default config;
    

    Π’Ρ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ»Π΅ fill Π² Ρ„Π°ΠΉΠ»Π°Ρ… содСрТимого. Intlayer сначала рассмотрит ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ словаря, Π° Π·Π°Ρ‚Π΅ΠΌ вСрнётся ΠΊ глобальной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

    Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

    Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ для автоматичСски заполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ, JSON, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ форматирования. Однако Intlayer Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ .ts, .js, .mjs, .cjs ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

    src/components/example/example.content.ts
    const exampleContent = {
      key: "example",
      autoFill: "./example.filled.content.ts",
      content: {
        // Π’Π°ΡˆΠ΅ содСрТимоС
      },
    };
    

    Π­Ρ‚ΠΎ сгСнСрируСт Ρ„Π°ΠΉΠ» ΠΏΠΎ адрСсу:

    plaintext
    src/components/example/example.filled.content.ts
    

    ГСнСрация Ρ„Π°ΠΉΠ»ΠΎΠ² .js, .ts ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

    • Если Ρ„Π°ΠΉΠ» ΡƒΠΆΠ΅ сущСствуСт, Intlayer Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AST (Абстрактного синтаксичСского Π΄Π΅Ρ€Π΅Π²Π°), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹.
    • Если Ρ„Π°ΠΉΠ» Π½Π΅ сущСствуСт, Intlayer сгСнСрируСт Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ шаблон Ρ„Π°ΠΉΠ»Π° Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ содСрТимого ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

    ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ

    ПолС autoFill Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ.

    src/components/example/example.content.ts
    const exampleContent = {
      key: "example",
      autoFill: "/messages/example.content.json",
      content: {
        // Π’Π°ΡˆΠ΅ содСрТимоС
      },
    };
    

    Π­Ρ‚ΠΎ сгСнСрируСт Ρ„Π°ΠΉΠ» ΠΏΠΎ адрСсу:

    plaintext
    /messages/example.content.json
    

    АвтоматичСская гСнСрация Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ содСрТимого для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ локаля

    ПолС autoFill Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ содСрТимого для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ локаля.

    src/components/example/example.content.ts
    const exampleContent = {
      key: "example",
      autoFill: {
        fr: "./example.fr.content.json",
        es: "./example.es.content.json",
      },
      content: {
        // Π’Π°ΡˆΠ΅ содСрТимоС
      },
    };
    

    Π­Ρ‚ΠΎ сгСнСрируСт Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°:

    • src/components/example/example.fr.content.json
    • src/components/example/example.es.content.json
    Π’ этом случаС, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ содСрТит всС Π»ΠΎΠΊΠ°Π»ΠΈ, Intlayer пропускаСт Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π»ΠΎΠΊΠ°Π»Π΅ΠΉ.

    Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ автозаполнСния для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ

    ИспользованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΠΎΠ»Π΅ autoFill позволяСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Π»ΠΎΠΊΠ°Π»Π΅ΠΉ.

    src/components/example/example.content.ts
    const exampleContent = {
      key: "example",
      autoFill: {
        fr: "./example.fr.content.json",
      },
      content: {
        // Π’Π°ΡˆΠ΅ содСрТимоС
      },
    };
    

    Π­Ρ‚ΠΎ сгСнСрируСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π½Π° французский язык.

    ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ

    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡƒΡ‚ΠΈ autoFill для динамичСского опрСдСлСния Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ для сгСнСрированных Ρ„Π°ΠΉΠ»ΠΎΠ².

    ДоступныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

    • {{locale}} – Код Π»ΠΎΠΊΠ°Π»ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, fr, es)
    • {{fileName}} – Имя Ρ„Π°ΠΉΠ»Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, index)
    • {{key}} – ΠšΠ»ΡŽΡ‡ словаря (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, example)
    src/components/example/index.content.ts
    const exampleContent = {
      key: "example",
      autoFill: "/messages/{{locale}}/{{key}}.content.json",
      content: {
        // Π’Π°ΡˆΠ΅ содСрТимоС
      },
    };
    

    Π­Ρ‚ΠΎ сгСнСрируСт:

    • /messages/fr/example.content.json
    • /messages/es/example.content.json
    src/components/example/index.content.ts
    const exampleContent = {
      key: "example",
      autoFill: "./{{fileName}}.content.json",
      content: {
        // Π’Π°ΡˆΠ΅ содСрТимоС
      },
    };
    

    Π­Ρ‚ΠΎ сгСнСрируСт:

    • ./index.content.json
    • ./index.content.json