์ž‘๊ฐ€:
    ์ƒ์„ฑ: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๋Š” Bun ๋Ÿฐํƒ€์ž„์„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

    ๋‚ด๋ณด๋‚ด๊ธฐ

    ํ”Œ๋Ÿฌ๊ทธ์ธ

    ์ž„ํฌํŠธ:

    ts
    import { intlayer } from "elysia-intlayer";
    
    ํ•จ์ˆ˜์„ค๋ช…๊ด€๋ จ ๋ฌธ์„œ
    intlayerIntlayer๋ฅผ Elysia ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ†ตํ•ฉํ•˜๋Š” Elysia ํ”Œ๋Ÿฌ๊ทธ์ธ. ์Šคํ† ๋ฆฌ์ง€(์ฟ ํ‚ค, ํ—ค๋”)์—์„œ, ์ด์–ด์„œ Accept-Language์—์„œ ๋กœ์ผ€์ผ ๊ฐ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , locale, t, getIntlayer, getDictionary๋ฅผ ๋…ธ์ถœํ•˜๋Š” intlayer ๊ฐ์ฒด๋ฅผ ๋ผ์šฐํŠธ ์ปจํ…์ŠคํŠธ์— ์ฃผ์ž…ํ•˜๋ฉฐ, AsyncLocalStorage ์š”์ฒญ ์ปจํ…์ŠคํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.intlayer

    ํ•จ์ˆ˜

    ์ž„ํฌํŠธ:

    ts
    import { t, getIntlayer, getDictionary } from "elysia-intlayer";
    
    ํ•จ์ˆ˜์„ค๋ช…๊ด€๋ จ ๋ฌธ์„œ
    tElysia์—์„œ ํ˜„์žฌ ๋กœ์ผ€์ผ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ „์—ญ ๋ฒˆ์—ญ ํ•จ์ˆ˜. 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๋กœ์ผ€์ผ ๋งต์„ ํ˜„์žฌ ์š”์ฒญ ๋กœ์ผ€์ผ์— ํ•ด๋‹นํ•˜๋Š” ์ฝ˜ํ…์ธ ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฒˆ์—ญ ํ•จ์ˆ˜์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜.

    ์‚ฌ์šฉ๋ฒ•

    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())
      // ๋ผ์šฐํŠธ ์ปจํ…์ŠคํŠธ์—์„œ ๋กœ์ผ€์ผ๊ณผ ํ—ฌํผ๋ฅผ ์ฝ๊ธฐ
      .get("/", ({ intlayer }) => ({
        locale: intlayer!.locale,
        greeting: intlayer!.t({
          ko: "์•ˆ๋…•ํ•˜์„ธ์š”",
          en: "Hello",
          fr: "Bonjour",
          es: "Hola",
        }),
        content: intlayer!.getIntlayer("index").exampleOfContent,
      }))
      // ๋˜๋Š” ํ˜„์žฌ ์š”์ฒญ์— ๋ฐ”์ธ๋”ฉ๋œ ๋…๋ฆฝ ํ—ฌํผ ์‚ฌ์šฉํ•˜๊ธฐ
      .get("/t_example", () =>
        t({
          ko: "์˜์–ด๋กœ ๋ฐ˜ํ™˜๋œ ์ฝ˜ํ…์ธ ์˜ ์˜ˆ",
          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()) ์ดํ›„์— ๋“ฑ๋ก๋œ ๋ผ์šฐํŠธ์—์„œ๋Š” ๋Ÿฐํƒ€์ž„์— ๊ฐ’์ด ํ•ญ์ƒ ์กด์žฌํ•˜๋ฏ€๋กœ, strict ๋ชจ๋“œ์˜ TypeScript๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋ ค๋ฉด non-null ์–ด์„œ์…˜(intlayer!.locale) ๋˜๋Š” ์˜ต์…”๋„ ์ฒด์ด๋‹์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

    ๊ด€๋ จ ๋ฌธ์„œ