μ΄ νμ΄μ§μ μνλ AI μ΄μμ€ν΄νΈλ₯Ό μ¬μ©νμ¬ λ¬Έμλ₯Ό μμ½ν©λλ€
λ²μ κΈ°λ‘
- "μ»΄νμΌλ¬ μ΅μ
μ
λ°μ΄νΈ, FilePathPattern μ§μ μΆκ°"v8.2.02026. 3. 9.
- "μ»΄νμΌλ¬ μ΅μ
μ
λ°μ΄νΈ"v8.1.72026. 2. 25.
- "μ»΄νμΌλ¬ μΆμ"v7.3.12025. 11. 27.
μ΄ νμ΄μ§μ μ½ν μΈ λ AIλ₯Ό μ¬μ©νμ¬ λ²μλμμ΅λλ€.
μμ΄ μλ³Έ λ΄μ©μ μ΅μ λ²μ μ λ³΄κΈ°μ΄ λ¬Έμλ₯Ό κ°μ ν μμ΄λμ΄κ° μμΌμλ©΄ GitHubμ ν 리νμ€νΈλ₯Ό μ μΆνμ¬ μμ λ‘κ² κΈ°μ¬ν΄ μ£ΌμΈμ.
λ¬Έμμ λν GitHub λ§ν¬λ¬Έμμ Markdownμ ν΄λ¦½λ³΄λμ 볡μ¬
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: runnpx intlayer init --interactiveand select Compiler. On Vite there is nothing to configure β the compiler is plugged in directly through theintlayerCompiler()plugin. On Next.js the command scaffolds thebabel.config.jsshown below. The non-interactiveintlayer initleaves the compiler setup untouched.
Vite
Vite κΈ°λ° μ ν리μΌμ΄μ
(React, Vue, Svelte λ±)μ κ²½μ°, μ»΄νμΌλ¬λ₯Ό μ¬μ©νλ κ°μ₯ μ¬μ΄ λ°©λ²μ vite-intlayer νλ¬κ·ΈμΈμ μ¬μ©νλ κ²μ
λλ€.
μ€μΉ
μ½λλ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬
ꡬμ±
vite.config.ts νμΌμ μ
λ°μ΄νΈνμ¬ intlayerCompiler νλ¬κ·ΈμΈμ ν¬ν¨νμΈμ:
μ½λλ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬
λ 립ν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κ° νμν©λλ€.
μ¬μ©νλ νλ μμν¬μ λ§λ μ»΄νμΌλ¬ ν¨ν€μ§λ₯Ό λ°λμ μ€μΉνμΈμ:
μ½λλ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬
Next.js (Babel)
Next.js λλ Babelμ μ¬μ©νλ λ€λ₯Έ Webpack κΈ°λ° μ ν리μΌμ΄μ
μ κ²½μ°, @intlayer/babel νλ¬κ·ΈμΈμ μ¬μ©νμ¬ μ»΄νμΌλ¬λ₯Ό ꡬμ±ν μ μμ΅λλ€.
μ€μΉ
μ½λλ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬
ꡬμ±
babel.config.js(λλ babel.config.json) νμΌμ μ
λ°μ΄νΈνμ¬ μΆμΆ νλ¬κ·ΈμΈμ ν¬ν¨νμΈμ. Intlayer ꡬμ±μ μλμΌλ‘ λ‘λνλ ν¬νΌ ν¨μ getExtractPluginOptionsλ₯Ό μ 곡ν©λλ€.
μ½λλ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬
μ΄ κ΅¬μ±μ μ»΄ν¬λνΈ λ΄μ μ μΈλ μ½ν μΈ κ° μλμΌλ‘ μΆμΆλμ΄ λΉλ κ³Όμ μ€μ μ¬μ μμ±μ μ¬μ©λλλ‘ λ³΄μ₯ν©λλ€.
See complete tutorial: Intlayer Compiler with Next.js
μ¬μ©μ μ μ ꡬμ±
μ»΄νμΌλ¬ λμμ μ¬μ©μ μ μνλ €λ©΄ νλ‘μ νΈ λ£¨νΈμ μλ intlayer.config.ts νμΌμ μ
λ°μ΄νΈν μ μμ΅λλ€.
μ½λλ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬
μ»΄νμΌλ¬ κ΅¬μ± μ°Έμ‘°
λ€μ μμ±μ 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'νμμ μ¬μ©νμ¬ λ¬Έμμ΄λ‘ μ€μ νκ±°λ ν¨μλ‘ μ€μ ν μ μμ΅λλ€. - μ°Έκ³ :
./**/*κ²½λ‘λ μ»΄ν¬λνΈλ₯Ό κΈ°μ€μΌλ‘ ν΄κ²°λ©λλ€./**/*κ²½λ‘λ IntlayerbaseDirμ κΈ°μ€μΌλ‘ ν΄κ²°λ©λλ€. - μ°Έκ³ : λ‘μΌμΌμ΄ κ²½λ‘μ μ μλ κ²½μ° μ¬μ μ λ‘μΌμΌλ³λ‘ μμ±λ©λλ€.
- μμ:
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 λͺ
λ Ήμ μ¬μ©νμ¬ μ½λμμ λλ½λ λ²μμ ν
μ€νΈνκ³ μ±μΈ μ μμ΅λλ€.
μ½λλ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬
μ½λλ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬
μΆμΆ
Intlayerλ μ½λμμ μ½ν
μΈ λ₯Ό μΆμΆνλ λ° λμμ΄ λλ CLI λꡬλ₯Ό μ 곡ν©λλ€. intlayer extract λͺ
λ Ήμ μ¬μ©νμ¬ μ½λμμ μ½ν
μΈ λ₯Ό μΆμΆν μ μμ΅λλ€.
μ½λλ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬
μμΈν λ΄μ©μ CLI λ¬Έμ λ₯Ό μ°Έμ‘°νμΈμ.
