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

    ΠŸΠ°ΠΊΠ΅Ρ‚ elysia-intlayer

    ΠŸΠ°ΠΊΠ΅Ρ‚ elysia-intlayer прСдоставляСт ΠΏΠ»Π°Π³ΠΈΠ½ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Elysia для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Он опрСдСляСт локаль ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ внСдряСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ intlayer Π² контСкст ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°.

    Установка

    bash
    npm install intlayer elysia-intlayer
    
    elysia: это peer dependency (>=1.0.0). Elysia рассчитан Π½Π° runtime Bun.

    Экспорты

    Плагин

    Π˜ΠΌΠΏΠΎΡ€Ρ‚:

    ts
    import { intlayer } from "elysia-intlayer";
    
    Π€ΡƒΠ½ΠΊΡ†ΠΈΡΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅Π‘Π²ΡΠ·Π°Π½Π½Π°Ρ докумСнтация
    intlayerПлагин Elysia, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Intlayer Π² вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Elysia. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈΠ· storage (cookies, headers), Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ· Accept-Language, внСдряСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ intlayer, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ locale, t, getIntlayer ΠΈ getDictionary, Π² контСкст ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° ΠΈ настраиваСт контСкст запроса AsyncLocalStorage.intlayer

    Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

    Π˜ΠΌΠΏΠΎΡ€Ρ‚:

    ts
    import { t, getIntlayer, getDictionary } from "elysia-intlayer";
    
    Π€ΡƒΠ½ΠΊΡ†ΠΈΡΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅Π‘Π²ΡΠ·Π°Π½Π½Π°Ρ докумСнтация
    tΠ“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ функция ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ содСрТимоС для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ Π² Elysia. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ AsyncLocalStorage для доступа ΠΊ контСксту запроса, настроСнному ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ intlayer, ΠΈ Π²Π½Π΅ Π΅Π³ΠΎ возвращаСтся ΠΊ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Π°ΠΊΠΆΠ΅ доступна Ρ‡Π΅Ρ€Π΅Π· intlayer.t.translation
    getIntlayerΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΠΎ Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈΠ· сгСнСрированной Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ содСрТимоС для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ вСрсия getDictionary. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ AsyncLocalStorage для доступа ΠΊ контСксту запроса. Π’Π°ΠΊΠΆΠ΅ доступна Ρ‡Π΅Ρ€Π΅Π· intlayer.getIntlayer.-
    getDictionaryΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ словарСй ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ содСрТимоС для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ t(), пСрСчислСния, markdown, HTML ΠΈ Ρ‚.Π΄. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ AsyncLocalStorage для доступа ΠΊ контСксту запроса. Π’Π°ΠΊΠΆΠ΅ доступна Ρ‡Π΅Ρ€Π΅Π· intlayer.getDictionary.-

    Π’ΠΈΠΏΡ‹

    Π˜ΠΌΠΏΠΎΡ€Ρ‚:

    ts
    import type { IntlayerContext, TranslateFunction } from "elysia-intlayer";
    
    ВипОписаниС
    IntlayerContextΠ€ΠΎΡ€ΠΌΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° intlayer, внСдряСмого Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ контСкст ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°: locale, locale_storage, locale_detected, defaultLocale, t, getIntlayer, getDictionary.
    TranslateFunctionΠ‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π΅ΠΉ locale map Π² содСрТимоС, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π»ΠΎΠΊΠ°Π»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ запроса.

    ИспользованиС

    src/index.ts
    import { Elysia } from "elysia";
    import { getDictionary, getIntlayer, intlayer, t } from "elysia-intlayer";
    import dictionaryExample from "./index.content";
    
    const app = new Elysia()
      // Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
      .use(intlayer())
      // Π§ΠΈΡ‚Π°Π΅ΠΌ локаль ΠΈ helpers ΠΈΠ· контСкста ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°
      .get("/", ({ intlayer }) => ({
        locale: intlayer!.locale,
        greeting: intlayer!.t({
          ru: "ΠŸΡ€ΠΈΠ²Π΅Ρ‚",
          en: "Hello",
          fr: "Bonjour",
          es: "Hola",
        }),
        content: intlayer!.getIntlayer("index").exampleOfContent,
      }))
      // Или ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ standalone helpers, привязанныС ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ запросу
      .get("/t_example", () =>
        t({
          ru: "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π½Π° русском",
          en: "Example of returned content in English",
          fr: "Exemple de contenu renvoyΓ© en franΓ§ais",
          es: "Ejemplo de contenido devuelto en espaΓ±ol",
        })
      )
      .get("/getIntlayer_example", () => getIntlayer("index").exampleOfContent)
      .get(
        "/getDictionary_example",
        () => getDictionary(dictionaryExample).exampleOfContent
      )
      .listen(3000);
    
    console.log(
      `🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}`
    );
    
    Плагин рСгистрируСт свой контСкст Ρ‡Π΅Ρ€Π΅Π· Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ derive, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Elysia Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ Partial<{ intlayer: IntlayerContext }>. Π’ΠΎ врСмя выполнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСгда присутствуСт для ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ², зарСгистрированных послС .use(intlayer()), поэтому ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ non-null assertion (intlayer!.locale), ΠΈΠ»ΠΈ optional chaining, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ TypeScript Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ strict.

    Бвязанная докумСнтация