μž‘κ°€:
    생성:2025-09-09λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈ:2026-06-23

    Intlayer 컴파일러 | i18n을 μœ„ν•œ μžλ™ν™”λœ μ½˜ν…μΈ  μΆ”μΆœ

    Intlayer μ»΄νŒŒμΌλŸ¬λž€?

    Intlayer μ»΄νŒŒμΌλŸ¬λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ΅­μ œν™”(i18n) ν”„λ‘œμ„ΈμŠ€λ₯Ό μžλ™ν™”ν•˜λ„λ‘ μ„€κ³„λœ κ°•λ ₯ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. μ†ŒμŠ€ μ½”λ“œ(JSX, TSX, Vue, Svelte)μ—μ„œ μ½˜ν…μΈ  선언을 μŠ€μΊ”ν•˜κ³  μΆ”μΆœν•˜μ—¬ ν•„μš”ν•œ 사전(dictionary) νŒŒμΌμ„ μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½˜ν…μΈ λ₯Ό μ»΄ν¬λ„ŒνŠΈμ™€ ν•¨κ»˜ μœ„μΉ˜μ‹œν‚¬ 수 있으며, Intlayerκ°€ μ‚¬μ „μ˜ 관리 및 동기화λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.

    Intlayer 컴파일러λ₯Ό μ‚¬μš©ν•˜λŠ” 이유

    • μžλ™ν™”: 사전에 μ½˜ν…μΈ λ₯Ό μˆ˜λ™μœΌλ‘œ 볡사-λΆ™μ—¬λ„£κΈ°ν•˜λŠ” μž‘μ—…μ„ μ œκ±°ν•©λ‹ˆλ‹€.

    • Speed: μ΅œμ ν™”λœ μ½˜ν…μΈ  μΆ”μΆœλ‘œ λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€λ₯Ό λΉ λ₯΄κ²Œ μœ μ§€ν•©λ‹ˆλ‹€.

    • 개발자 κ²½ν—˜: μ½˜ν…μΈ  선언을 μ‚¬μš© μœ„μΉ˜μ— κ°€κΉκ²Œ μœ μ§€ν•˜μ—¬ μœ μ§€λ³΄μˆ˜μ„±μ„ κ°œμ„ ν•©λ‹ˆλ‹€.

    • μžλ™ν™”: μ½˜ν…μΈ λ₯Ό 사전에 μˆ˜λ™μœΌλ‘œ λ³΅μ‚¬ν•˜μ—¬ λΆ™μ—¬λ„£λŠ” μž‘μ—…μ„ μ œκ±°ν•©λ‹ˆλ‹€.
    • 속도: λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€κ°€ λΉ λ₯΄κ²Œ μœ μ§€λ˜λ„λ‘ μ΅œμ ν™”λœ μ½˜ν…μΈ  μΆ”μΆœμ„ μ œκ³΅ν•©λ‹ˆλ‹€.
    • 개발자 κ²½ν—˜: μ½˜ν…μΈ  선언을 μ‚¬μš©λ˜λŠ” μœ„μΉ˜μ— κ·ΈλŒ€λ‘œ μœ μ§€ν•˜μ—¬ μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.
    • μ‹€μ‹œκ°„ μ—…λ°μ΄νŠΈ: 개발 쀑 즉각적인 ν”Όλ“œλ°±μ„ μœ„ν•œ Hot Module Replacement(HMR)λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

    더 κΉŠμ€ 비ꡐλ₯Ό μ›ν•œλ‹€λ©΄ Compiler vs. Declarative i18n λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Όμ„ μ°Έμ‘°ν•˜μ„Έμš”.

    Intlayer 컴파일러λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 이유

    μ»΄νŒŒμΌλŸ¬λŠ” ν›Œλ₯­ν•œ "λ°”λ‘œ μž‘λ™" κ²½ν—˜μ„ μ œκ³΅ν•˜μ§€λ§Œ, 인지해야 ν•  λͺ‡ κ°€μ§€ νŠΈλ ˆμ΄λ“œμ˜€ν”„λ„ λ„μž…ν•©λ‹ˆλ‹€:

    • νœ΄λ¦¬μŠ€ν‹± λͺ¨ν˜Έμ„±: μ»΄νŒŒμΌλŸ¬λŠ” μ‚¬μš©μž μ§€ν–₯ μ½˜ν…μΈ μ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 둜직(예: className="active", μƒνƒœ μ½”λ“œ, μ œν’ˆ ID)을 μΆ”μΈ‘ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ³΅μž‘ν•œ μ½”λ“œλ² μ΄μŠ€μ—μ„œλŠ” 이것이 μ˜€νƒμ§€ λ˜λŠ” λˆ„λ½λœ λ¬Έμžμ—΄λ‘œ μ΄μ–΄μ§ˆ 수 있으며, μˆ˜λ™ 주석 및 μ˜ˆμ™Έ μ²˜λ¦¬κ°€ ν•„μš”ν•©λ‹ˆλ‹€.
    • 정적 μΆ”μΆœλ§Œ: 컴파일러 기반 μΆ”μΆœμ€ 정적 뢄석에 μ˜μ‘΄ν•©λ‹ˆλ‹€. λŸ°νƒ€μž„μ—λ§Œ μ‘΄μž¬ν•˜λŠ” λ¬Έμžμ—΄(API 였λ₯˜ μ½”λ“œ, CMS ν•„λ“œ λ“±)은 μ»΄νŒŒμΌλŸ¬λ§ŒμœΌλ‘œλŠ” λ°œκ²¬ν•˜κ±°λ‚˜ λ²ˆμ—­ν•  수 μ—†μœΌλ―€λ‘œ μ—¬μ „νžˆ 보완적인 λŸ°νƒ€μž„ i18n μ „λž΅μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

    • 정적 μ „μš© μΆ”μΆœ: 컴파일러 기반 μΆ”μΆœμ€ 정적 뢄석에 μ˜μ‘΄ν•©λ‹ˆλ‹€. λŸ°νƒ€μž„μ—λ§Œ μ‘΄μž¬ν•˜λŠ” λ¬Έμžμ—΄(API 였λ₯˜ μ½”λ“œ, CMS ν•„λ“œ λ“±)은 μ»΄νŒŒμΌλŸ¬λ§ŒμœΌλ‘œλŠ” λ°œκ²¬ν•˜κ±°λ‚˜ λ²ˆμ—­ν•  수 μ—†μœΌλ―€λ‘œ, μ—¬μ „νžˆ 보완적인 λŸ°νƒ€μž„ i18n μ „λž΅μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

    더 κΉŠμ€ μ•„ν‚€ν…μ²˜ 비ꡐλ₯Ό μœ„ν•΄μ„œλŠ” λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό Compiler vs. Declarative i18n을 μ°Έμ‘°ν•˜μ„Έμš”.

    λŒ€μ•ˆμœΌλ‘œ, μ½˜ν…μΈ μ— λŒ€ν•œ μ™„μ „ν•œ μ œμ–΄λ₯Ό μœ μ§€ν•˜λ©΄μ„œ i18n ν”„λ‘œμ„ΈμŠ€λ₯Ό μžλ™ν™”ν•˜κΈ° μœ„ν•΄ IntlayerλŠ” μžλ™ μΆ”μΆœ λͺ…λ Ή intlayer extract(CLI λ¬Έμ„œ μ°Έμ‘°) λ˜λŠ” Intlayer VS Code ν™•μž₯의 Intlayer: extract content to Dictionary λͺ…λ Ή(VS Code ν™•μž₯ λ¬Έμ„œ μ°Έμ‘°)도 μ œκ³΅ν•©λ‹ˆλ‹€.

    μ‚¬μš©λ²•

    The quickest way to wire the compiler in is the interactive setup: run npx intlayer init --interactive and select Compiler. On Vite there is nothing to configure β€” the compiler is plugged in directly through the intlayerCompiler() plugin. On Next.js the command scaffolds the babel.config.js shown below. The non-interactive intlayer init leaves the compiler setup untouched.

    Vite

    Vite 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜(React, Vue, Svelte λ“±)의 경우, 컴파일러λ₯Ό μ‚¬μš©ν•˜λŠ” κ°€μž₯ μ‰¬μš΄ 방법은 vite-intlayer ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

    μ„€μΉ˜

    bash
    npm install vite-intlayer
    

    ꡬ성

    vite.config.ts νŒŒμΌμ„ μ—…λ°μ΄νŠΈν•˜μ—¬ intlayerCompiler ν”ŒλŸ¬κ·ΈμΈμ„ ν¬ν•¨ν•˜μ„Έμš”:

    vite.config.ts
    import { defineConfig } from "vite";
    import { intlayer } from "vite-intlayer";
    
    export default defineConfig({
      plugins: [
        intlayer({
          proxy: {
            ignore: (req) => req.url?.startsWith("/api"),
          },
        }),
      ],
    });
    
    λ…λ¦½ν˜• intlayerCompiler() ν”ŒλŸ¬κ·ΈμΈμ€ κ³ κΈ‰ 섀정을 μœ„ν•΄ μ—¬μ „νžˆ λ‚΄λ³΄λ‚΄μ§‘λ‹ˆλ‹€. intlayer()와 ν•¨κ»˜ λ“±λ‘ν•˜λŠ” 것은 μ•ˆμ „ν•©λ‹ˆλ‹€ β€” μ»΄νŒŒμΌλŸ¬λŠ” μžμ‹ μ„ 쀑볡 μ œκ±°ν•˜κ³  ν•œ 번만 μ‹€ν–‰λ©λ‹ˆλ‹€.

    See complete tutorial: Intlayer Compiler with Vite+React

    ν”„λ ˆμž„μ›Œν¬ 지원

    Vite ν”ŒλŸ¬κ·ΈμΈμ€ λ‹€μ–‘ν•œ 파일 μœ ν˜•μ„ μžλ™μœΌλ‘œ κ°μ§€ν•˜κ³  μ²˜λ¦¬ν•©λ‹ˆλ‹€:

    • React / JSX / TSX: 기본적으둜 μ²˜λ¦¬λ©λ‹ˆλ‹€.
    • Vue: @intlayer/vue-compilerκ°€ ν•„μš”ν•©λ‹ˆλ‹€.
    • Svelte: @intlayer/svelte-compilerκ°€ ν•„μš”ν•©λ‹ˆλ‹€.

    • Vue: @intlayer/vue-compilerκ°€ ν•„μš”ν•©λ‹ˆλ‹€.

    • Svelte: @intlayer/svelte-compilerκ°€ ν•„μš”ν•©λ‹ˆλ‹€.

    μ‚¬μš©ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬μ— λ§žλŠ” 컴파일러 νŒ¨ν‚€μ§€λ₯Ό λ°˜λ“œμ‹œ μ„€μΉ˜ν•˜μ„Έμš”:

    bash
    # Vue용
    npm install @intlayer/vue-compiler
    
    # Svelte용
    npm install @intlayer/svelte-compiler
    

    Next.js (Babel)

    Next.js λ˜λŠ” Babel을 μ‚¬μš©ν•˜λŠ” λ‹€λ₯Έ Webpack 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 경우, @intlayer/babel ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜μ—¬ 컴파일러λ₯Ό ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

    μ„€μΉ˜

    bash
    npm install @intlayer/babel
    

    ꡬ성

    babel.config.js(λ˜λŠ” babel.config.json) νŒŒμΌμ„ μ—…λ°μ΄νŠΈν•˜μ—¬ μΆ”μΆœ ν”ŒλŸ¬κ·ΈμΈμ„ ν¬ν•¨ν•˜μ„Έμš”. Intlayer ꡬ성을 μžλ™μœΌλ‘œ λ‘œλ“œν•˜λŠ” 헬퍼 ν•¨μˆ˜ getExtractPluginOptionsλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

    babel.config.js
    const {
      intlayerExtractBabelPlugin,
      intlayerOptimizeBabelPlugin,
      getExtractPluginOptions,
      getOptimizePluginOptions,
    } = require("@intlayer/babel");
    
    module.exports = {
      presets: ["next/babel"],
      plugins: [
        // μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ½˜ν…μΈ λ₯Ό μΆ”μΆœν•˜μ—¬ μ‚¬μ „μœΌλ‘œ λ³€ν™˜
        [intlayerExtractBabelPlugin, getExtractPluginOptions()],
        // useIntlayerλ₯Ό 직접 사전 μž„ν¬νŠΈλ‘œ λŒ€μ²΄ν•˜μ—¬ μž„ν¬νŠΈ μ΅œμ ν™”
        [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
      ],
    };
    

    이 ꡬ성은 μ»΄ν¬λ„ŒνŠΈ 내에 μ„ μ–Έλœ μ½˜ν…μΈ κ°€ μžλ™μœΌλ‘œ μΆ”μΆœλ˜μ–΄ λΉŒλ“œ κ³Όμ • 쀑에 사전 생성에 μ‚¬μš©λ˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.

    See complete tutorial: Intlayer Compiler with Next.js

    μ‚¬μš©μž μ •μ˜ ꡬ성

    컴파일러 λ™μž‘μ„ μ‚¬μš©μž μ •μ˜ν•˜λ €λ©΄ ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— μžˆλŠ” intlayer.config.ts νŒŒμΌμ„ μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    intlayer.config.ts
    import { type IntlayerConfig, Locales } from "intlayer";
    
    const config: IntlayerConfig = {
      compiler: {
        /**
         * 컴파일러 ν™œμ„±ν™” μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
         * 개발 쀑에 컴파일러λ₯Ό κ±΄λ„ˆλ›°κ³  μ‹œμž‘ μ‹œκ°„μ„ λ‹¨μΆ•ν•˜λ €λ©΄ 'build-only'둜 μ„€μ •ν•˜μ‹­μ‹œμ˜€.
         */
        enabled: true,
    
        /**
         * 좜λ ₯ 파일 경둜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. `outputDir`을 λŒ€μ²΄ν•©λ‹ˆλ‹€.
         *
         * - `./` κ²½λ‘œλŠ” μ»΄ν¬λ„ŒνŠΈ 디렉터리λ₯Ό κΈ°μ€€μœΌλ‘œ ν•΄κ²°λ©λ‹ˆλ‹€.
         * - `/` κ²½λ‘œλŠ” ν”„λ‘œμ νŠΈ 루트(`baseDir`)λ₯Ό κΈ°μ€€μœΌλ‘œ ν•΄κ²°λ©λ‹ˆλ‹€.
         *
         * - κ²½λ‘œμ— `{{locale}}` λ³€μˆ˜λ₯Ό λ„£μœΌλ©΄ μ–Έμ–΄λ³„λ‘œ λΆ„λ¦¬λœ 사전 생성이 ν™œμ„±ν™”λ©λ‹ˆλ‹€.
         *
         * μ˜ˆμ‹œ:
         * ```ts
         * {
         *   // μ»΄ν¬λ„ŒνŠΈ μ˜†μ— λ‹€κ΅­μ–΄ .content.ts 파일 생성
         *   output: ({ fileName, extension }) => `./${fileName}${extension}`,
         *
         *   // output: './{{fileName}}{{extension}}', // λ¬Έμžμ—΄ ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•œ λ™μΌν•œ ν‘œν˜„
         * }
         * ```
         *
         * ```ts
         * {
         *   // ν”„λ‘œμ νŠΈ 루트의 언어별 쀑앙 집쀑식 JSON 파일 생성
         *   output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
         *
         *   // output: '/locales/{{locale}}/{{key}}.content.json', // λ¬Έμžμ—΄ ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•œ λ™μΌν•œ ν‘œν˜„
         * }
         * ```
         *
         * λ³€μˆ˜ λͺ©λ‘:
         *   - `fileName`: 파일 이름.
         *   - `key`: μ½˜ν…μΈ  ν‚€.
         *   - `locale`: μ½˜ν…μΈ  λ‘œμΌ€μΌ.
         *   - `extension`: 파일 ν™•μž₯자.
         *   - `componentFileName`: μ»΄ν¬λ„ŒνŠΈ 파일 이름.
         *   - `componentExtension`: μ»΄ν¬λ„ŒνŠΈ 파일 ν™•μž₯자.
         *   - `format`: 사전 ν˜•μ‹.
         *   - `componentFormat`: μ»΄ν¬λ„ŒνŠΈ 사전 ν˜•μ‹.
         *   - `componentDirPath`: μ»΄ν¬λ„ŒνŠΈ 디렉터리 경둜.
         */
        output: ({ fileName, extension }) => `./${fileName}${extension}`,
    
        /**
         * λ³€ν™˜λœ ν›„ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ €μž₯ν• μ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
         * μ΄λ ‡κ²Œ ν•˜λ©΄ 컴파일러λ₯Ό ν•œ 번만 μ‹€ν–‰ν•˜μ—¬ 앱을 λ³€ν™˜ν•œ λ‹€μŒ μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
         */
        saveComponents: false,
    
        /**
         * μƒμ„±λœ νŒŒμΌμ— μ½˜ν…μΈ λ§Œ μ‚½μž…ν•©λ‹ˆλ‹€. λ‘œμΌ€μΌλ‹Ή i18next λ˜λŠ” ICU MessageFormat JSON 좜λ ₯에 μœ μš©ν•©λ‹ˆλ‹€.
         *
         * - `output: ({ locale, key }) => `./locale/${locale}/${key}.json`,`
         */
        noMetadata: false,
    
        /**
         * 사전 ν‚€ 접두사
         */
        dictionaryKeyPrefix: "", // μΆ”μΆœλœ 사전 킀에 선택적 접두사 μΆ”κ°€
      },
    };
    
    export default config;
    

    컴파일러 ꡬ성 μ°Έμ‘°

    λ‹€μŒ 속성은 intlayer.config.ts 파일의 compiler λΈ”λ‘μ—μ„œ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

    • enabled:

      • ν˜•μ‹: boolean | 'build-only'
      • κΈ°λ³Έκ°’: true
      • μ„€λͺ…: 컴파일러 ν™œμ„±ν™” μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • dictionaryKeyPrefix:

      • ν˜•μ‹: string
      • κΈ°λ³Έκ°’: ''
      • μ„€λͺ…: μΆ”μΆœλœ 사전 ν‚€μ˜ 접두사.
    • transformPattern:

      • ν˜•μ‹: string | string[]
      • κΈ°λ³Έκ°’: ['**/*.{js,ts,mjs,cjs,jsx,tsx,vue,svelte}', '!**/node_modules/**']
      • μ„€λͺ…: (μ‚¬μš© 쀑단됨: λŒ€μ‹  build.traversePattern을 μ‚¬μš©ν•˜μ„Έμš”) μ΅œμ ν™”ν•  μ½”λ“œλ₯Ό νƒμƒ‰ν•˜λŠ” νŒ¨ν„΄.
    • excludePattern:

      • ν˜•μ‹: string | string[]
      • κΈ°λ³Έκ°’: ['**/node_modules/**']
      • μ„€λͺ…: (μ‚¬μš© 쀑단됨: λŒ€μ‹  build.traversePattern을 μ‚¬μš©ν•˜μ„Έμš”) μ΅œμ ν™”μ—μ„œ μ œμ™Έν•  νŒ¨ν„΄.
    • output:

      • ν˜•μ‹: FilePathPattern
      • κΈ°λ³Έκ°’: ({ key }) => 'compiler/${key}.content.json'
      • μ„€λͺ…: 좜λ ₯ 파일 경둜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. outputDir을 λŒ€μ²΄ν•©λ‹ˆλ‹€. {{locale}}, {{key}}, {{fileName}}, {{extension}}, {{format}}, {{dirPath}}, {{componentFileName}}, {{componentExtension}}, {{componentFormat}}와 같은 동적 λ³€μˆ˜λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€. 'my/{{var}}/path' ν˜•μ‹μ„ μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄λ‘œ μ„€μ •ν•˜κ±°λ‚˜ ν•¨μˆ˜λ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      • μ°Έκ³ : ./**/* κ²½λ‘œλŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό κΈ°μ€€μœΌλ‘œ ν•΄κ²°λ©λ‹ˆλ‹€. /**/* κ²½λ‘œλŠ” Intlayer baseDir을 κΈ°μ€€μœΌλ‘œ ν•΄κ²°λ©λ‹ˆλ‹€.
      • μ°Έκ³ : λ‘œμΌ€μΌμ΄ κ²½λ‘œμ— μ •μ˜λœ 경우 사전은 λ‘œμΌ€μΌλ³„λ‘œ μƒμ„±λ©λ‹ˆλ‹€.
      • μ˜ˆμ‹œ: output: ({ locale, key }) => 'compiler/${locale}/${key}.json'
    • noMetadata:

      • ν˜•μ‹: boolean
      • κΈ°λ³Έκ°’: false
      • μ„€λͺ…: 메타데이터λ₯Ό νŒŒμΌμ— μ €μž₯ν• μ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. true인 경우 μ»΄νŒŒμΌλŸ¬λŠ” μ‚¬μ „μ˜ 메타데이터(ν‚€, μ½˜ν…μΈ  래퍼)λ₯Ό μ €μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‘œμΌ€μΌλ³„ i18next λ˜λŠ” ICU MessageFormat JSON 좜λ ₯에 μœ μš©ν•©λ‹ˆλ‹€.
      • μ°Έκ³ : loadJSON ν”ŒλŸ¬κ·ΈμΈκ³Ό ν•¨κ»˜ μ‚¬μš©ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
      • μ˜ˆμ‹œ: true인 경우: json { "key": "value" } false인 경우: json { "key": "value", "content": { "key": "value" } }
    • saveComponents:

      • ν˜•μ‹: boolean
      • κΈ°λ³Έκ°’: false
      • μ„€λͺ…: λ³€ν™˜λœ ν›„ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ €μž₯ν• μ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

    λˆ„λ½λœ λ²ˆμ—­ μ±„μš°κΈ°

    IntlayerλŠ” λˆ„λ½λœ λ²ˆμ—­μ„ μ±„μš°λŠ” 데 도움이 λ˜λŠ” CLI 도ꡬλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. intlayer λͺ…령을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œμ—μ„œ λˆ„λ½λœ λ²ˆμ—­μ„ ν…ŒμŠ€νŠΈν•˜κ³  μ±„μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.

    bash
    npx intlayer test         # λˆ„λ½λœ λ²ˆμ—­μ΄ μžˆλŠ”μ§€ ν…ŒμŠ€νŠΈ
    
    bash
    npx intlayer fill         # λˆ„λ½λœ λ²ˆμ—­ μ±„μš°κΈ°
    

    μΆ”μΆœ

    IntlayerλŠ” μ½”λ“œμ—μ„œ μ½˜ν…μΈ λ₯Ό μΆ”μΆœν•˜λŠ” 데 도움이 λ˜λŠ” CLI 도ꡬλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. intlayer extract λͺ…령을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œμ—μ„œ μ½˜ν…μΈ λ₯Ό μΆ”μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    bash
    npx intlayer extract
    

    μžμ„Έν•œ λ‚΄μš©μ€ CLI λ¬Έμ„œ λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.