@intlayer/docs 9.2.0 → 9.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/README.md +24 -24
  2. package/blog/ar/index.md +1 -1
  3. package/blog/ar/rag_powered_documentation_assistant.md +1 -1
  4. package/blog/de/index.md +1 -1
  5. package/blog/en/index.md +1 -1
  6. package/blog/en-GB/index.md +1 -1
  7. package/blog/es/index.md +1 -1
  8. package/blog/fr/index.md +1 -1
  9. package/blog/hi/index.md +1 -1
  10. package/blog/id/index.md +1 -1
  11. package/blog/it/index.md +1 -1
  12. package/blog/ja/index.md +1 -1
  13. package/blog/ko/index.md +1 -1
  14. package/blog/pl/index.md +1 -1
  15. package/blog/pl/rag_powered_documentation_assistant.md +1 -1
  16. package/blog/pt/index.md +1 -1
  17. package/blog/ru/index.md +1 -1
  18. package/blog/uk/index.md +1 -1
  19. package/blog/vi/index.md +1 -1
  20. package/blog/zh/index.md +1 -1
  21. package/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -2
  22. package/dist/cjs/authors2.cjs +0 -1
  23. package/dist/cjs/common.cjs +24 -1
  24. package/dist/cjs/common.cjs.map +1 -1
  25. package/dist/cjs/generated/blog.entry.cjs +35 -6
  26. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  27. package/dist/cjs/generated/docs.entry.cjs +35 -6
  28. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  29. package/dist/cjs/generated/frequentQuestions.entry.cjs +35 -6
  30. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  31. package/dist/cjs/generated/legal.entry.cjs +35 -6
  32. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  33. package/dist/esm/common.mjs +24 -1
  34. package/dist/esm/common.mjs.map +1 -1
  35. package/dist/esm/generated/blog.entry.mjs +35 -6
  36. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  37. package/dist/esm/generated/docs.entry.mjs +35 -6
  38. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  39. package/dist/esm/generated/frequentQuestions.entry.mjs +35 -6
  40. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  41. package/dist/esm/generated/legal.entry.mjs +35 -6
  42. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  43. package/dist/types/common.d.ts.map +1 -1
  44. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  45. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  46. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  47. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  48. package/docs/ar/bundle_optimization.md +58 -25
  49. package/docs/ar/configuration.md +10 -10
  50. package/docs/ar/interest_of_intlayer.md +24 -22
  51. package/docs/ar/intlayer_with_express.md +1 -1
  52. package/docs/ar/intlayer_with_svelte_kit.md +1 -1
  53. package/docs/ar/intlayer_with_tanstack+solid.md +5 -3
  54. package/docs/ar/intlayer_with_tanstack.md +5 -3
  55. package/docs/ar/live-sync.md +4 -0
  56. package/docs/ar/lsp.md +114 -175
  57. package/docs/ar/readme.md +25 -25
  58. package/docs/bn/bundle_optimization.md +58 -25
  59. package/docs/bn/configuration.md +10 -10
  60. package/docs/bn/interest_of_intlayer.md +24 -22
  61. package/docs/cs/bundle_optimization.md +58 -25
  62. package/docs/cs/configuration.md +10 -10
  63. package/docs/cs/interest_of_intlayer.md +24 -22
  64. package/docs/de/bundle_optimization.md +58 -25
  65. package/docs/de/configuration.md +10 -10
  66. package/docs/de/interest_of_intlayer.md +24 -22
  67. package/docs/de/intlayer_with_svelte_kit.md +1 -1
  68. package/docs/de/intlayer_with_tanstack+solid.md +5 -3
  69. package/docs/de/intlayer_with_tanstack.md +5 -3
  70. package/docs/de/live-sync.md +4 -0
  71. package/docs/de/lsp.md +111 -172
  72. package/docs/de/readme.md +24 -24
  73. package/docs/en/bundle_optimization.md +51 -23
  74. package/docs/en/configuration.md +10 -10
  75. package/docs/en/interest_of_intlayer.md +24 -22
  76. package/docs/en/intlayer_with_svelte_kit.md +1 -1
  77. package/docs/en/intlayer_with_tanstack+solid.md +5 -3
  78. package/docs/en/intlayer_with_tanstack.md +5 -3
  79. package/docs/en/live-sync.md +4 -0
  80. package/docs/en/lsp.md +109 -170
  81. package/docs/en/readme.md +24 -24
  82. package/docs/en-GB/bundle_optimization.md +58 -25
  83. package/docs/en-GB/configuration.md +10 -10
  84. package/docs/en-GB/interest_of_intlayer.md +24 -22
  85. package/docs/en-GB/intlayer_with_svelte_kit.md +1 -1
  86. package/docs/en-GB/intlayer_with_tanstack+solid.md +5 -3
  87. package/docs/en-GB/intlayer_with_tanstack.md +5 -3
  88. package/docs/en-GB/live-sync.md +4 -0
  89. package/docs/en-GB/lsp.md +109 -170
  90. package/docs/en-GB/readme.md +24 -24
  91. package/docs/es/bundle_optimization.md +58 -25
  92. package/docs/es/configuration.md +10 -10
  93. package/docs/es/interest_of_intlayer.md +24 -22
  94. package/docs/es/intlayer_with_svelte_kit.md +1 -1
  95. package/docs/es/intlayer_with_tanstack+solid.md +5 -3
  96. package/docs/es/intlayer_with_tanstack.md +5 -3
  97. package/docs/es/live-sync.md +4 -0
  98. package/docs/es/lsp.md +114 -175
  99. package/docs/es/readme.md +24 -24
  100. package/docs/fr/bundle_optimization.md +58 -25
  101. package/docs/fr/configuration.md +10 -10
  102. package/docs/fr/interest_of_intlayer.md +24 -22
  103. package/docs/fr/intlayer_with_svelte_kit.md +1 -1
  104. package/docs/fr/intlayer_with_tanstack+solid.md +5 -3
  105. package/docs/fr/intlayer_with_tanstack.md +5 -3
  106. package/docs/fr/live-sync.md +4 -0
  107. package/docs/fr/lsp.md +110 -171
  108. package/docs/fr/readme.md +24 -24
  109. package/docs/hi/bundle_optimization.md +58 -25
  110. package/docs/hi/configuration.md +10 -10
  111. package/docs/hi/interest_of_intlayer.md +24 -22
  112. package/docs/hi/intlayer_with_express.md +1 -1
  113. package/docs/hi/intlayer_with_svelte_kit.md +1 -1
  114. package/docs/hi/intlayer_with_tanstack+solid.md +5 -3
  115. package/docs/hi/intlayer_with_tanstack.md +5 -3
  116. package/docs/hi/live-sync.md +4 -0
  117. package/docs/hi/lsp.md +113 -174
  118. package/docs/hi/readme.md +24 -24
  119. package/docs/id/bundle_optimization.md +58 -25
  120. package/docs/id/configuration.md +10 -10
  121. package/docs/id/interest_of_intlayer.md +24 -22
  122. package/docs/id/intlayer_with_svelte_kit.md +1 -1
  123. package/docs/id/intlayer_with_tanstack+solid.md +5 -3
  124. package/docs/id/intlayer_with_tanstack.md +5 -3
  125. package/docs/id/live-sync.md +4 -0
  126. package/docs/id/lsp.md +113 -174
  127. package/docs/id/readme.md +24 -24
  128. package/docs/it/bundle_optimization.md +58 -25
  129. package/docs/it/configuration.md +10 -10
  130. package/docs/it/interest_of_intlayer.md +24 -22
  131. package/docs/it/intlayer_with_svelte_kit.md +1 -1
  132. package/docs/it/intlayer_with_tanstack+solid.md +5 -3
  133. package/docs/it/intlayer_with_tanstack.md +5 -3
  134. package/docs/it/live-sync.md +4 -0
  135. package/docs/it/lsp.md +115 -176
  136. package/docs/it/readme.md +24 -24
  137. package/docs/ja/bundle_optimization.md +58 -25
  138. package/docs/ja/configuration.md +10 -10
  139. package/docs/ja/interest_of_intlayer.md +24 -22
  140. package/docs/ja/intlayer_with_tanstack+solid.md +5 -3
  141. package/docs/ja/intlayer_with_tanstack.md +5 -3
  142. package/docs/ja/live-sync.md +4 -0
  143. package/docs/ja/lsp.md +113 -174
  144. package/docs/ja/readme.md +24 -24
  145. package/docs/ko/bundle_optimization.md +58 -25
  146. package/docs/ko/configuration.md +10 -10
  147. package/docs/ko/interest_of_intlayer.md +24 -22
  148. package/docs/ko/intlayer_with_svelte_kit.md +1 -1
  149. package/docs/ko/intlayer_with_tanstack+solid.md +5 -3
  150. package/docs/ko/intlayer_with_tanstack.md +5 -3
  151. package/docs/ko/live-sync.md +4 -0
  152. package/docs/ko/lsp.md +112 -173
  153. package/docs/ko/readme.md +24 -24
  154. package/docs/nl/bundle_optimization.md +58 -25
  155. package/docs/nl/configuration.md +10 -10
  156. package/docs/nl/interest_of_intlayer.md +24 -22
  157. package/docs/pl/bundle_optimization.md +58 -25
  158. package/docs/pl/configuration.md +10 -10
  159. package/docs/pl/interest_of_intlayer.md +4 -2
  160. package/docs/pl/intlayer_with_svelte_kit.md +1 -1
  161. package/docs/pl/intlayer_with_tanstack+solid.md +5 -3
  162. package/docs/pl/intlayer_with_tanstack.md +5 -3
  163. package/docs/pl/live-sync.md +4 -0
  164. package/docs/pl/lsp.md +115 -176
  165. package/docs/pl/readme.md +24 -24
  166. package/docs/pt/bundle_optimization.md +58 -24
  167. package/docs/pt/configuration.md +10 -10
  168. package/docs/pt/interest_of_intlayer.md +24 -22
  169. package/docs/pt/intlayer_with_svelte_kit.md +1 -1
  170. package/docs/pt/intlayer_with_tanstack+solid.md +5 -3
  171. package/docs/pt/intlayer_with_tanstack.md +5 -3
  172. package/docs/pt/live-sync.md +4 -0
  173. package/docs/pt/lsp.md +113 -174
  174. package/docs/pt/readme.md +24 -24
  175. package/docs/ru/bundle_optimization.md +58 -25
  176. package/docs/ru/configuration.md +10 -10
  177. package/docs/ru/interest_of_intlayer.md +24 -22
  178. package/docs/ru/intlayer_with_nextjs_14.md +1 -1
  179. package/docs/ru/intlayer_with_nextjs_15.md +1 -1
  180. package/docs/ru/intlayer_with_svelte_kit.md +1 -1
  181. package/docs/ru/intlayer_with_tanstack+solid.md +5 -3
  182. package/docs/ru/intlayer_with_tanstack.md +5 -3
  183. package/docs/ru/live-sync.md +4 -0
  184. package/docs/ru/lsp.md +112 -173
  185. package/docs/ru/readme.md +24 -24
  186. package/docs/tr/bundle_optimization.md +58 -25
  187. package/docs/tr/configuration.md +10 -10
  188. package/docs/tr/interest_of_intlayer.md +24 -22
  189. package/docs/tr/intlayer_with_svelte_kit.md +1 -1
  190. package/docs/tr/intlayer_with_tanstack+solid.md +5 -3
  191. package/docs/tr/intlayer_with_tanstack.md +5 -3
  192. package/docs/tr/live-sync.md +4 -0
  193. package/docs/tr/lsp.md +113 -174
  194. package/docs/tr/readme.md +24 -24
  195. package/docs/uk/bundle_optimization.md +58 -25
  196. package/docs/uk/configuration.md +10 -10
  197. package/docs/uk/interest_of_intlayer.md +4 -2
  198. package/docs/uk/intlayer_with_svelte_kit.md +1 -1
  199. package/docs/uk/intlayer_with_tanstack+solid.md +5 -3
  200. package/docs/uk/intlayer_with_tanstack.md +5 -3
  201. package/docs/uk/live-sync.md +4 -0
  202. package/docs/uk/lsp.md +113 -174
  203. package/docs/uk/per_locale_file.md +1 -1
  204. package/docs/uk/readme.md +24 -24
  205. package/docs/ur/bundle_optimization.md +58 -25
  206. package/docs/ur/configuration.md +10 -10
  207. package/docs/ur/interest_of_intlayer.md +24 -22
  208. package/docs/vi/bundle_optimization.md +58 -25
  209. package/docs/vi/configuration.md +10 -10
  210. package/docs/vi/interest_of_intlayer.md +24 -22
  211. package/docs/vi/intlayer_with_svelte_kit.md +1 -1
  212. package/docs/vi/intlayer_with_tanstack+solid.md +5 -3
  213. package/docs/vi/intlayer_with_tanstack.md +5 -3
  214. package/docs/vi/live-sync.md +4 -0
  215. package/docs/vi/lsp.md +115 -176
  216. package/docs/vi/readme.md +24 -24
  217. package/docs/zh/bundle_optimization.md +58 -25
  218. package/docs/zh/configuration.md +10 -10
  219. package/docs/zh/interest_of_intlayer.md +24 -22
  220. package/docs/zh/intlayer_with_svelte_kit.md +1 -1
  221. package/docs/zh/intlayer_with_tanstack+solid.md +5 -3
  222. package/docs/zh/intlayer_with_tanstack.md +5 -3
  223. package/docs/zh/live-sync.md +4 -0
  224. package/docs/zh/lsp.md +113 -174
  225. package/docs/zh/readme.md +21 -21
  226. package/docs/zh-TW/bundle_optimization.md +58 -25
  227. package/docs/zh-TW/interest_of_intlayer.md +24 -22
  228. package/package.json +7 -7
  229. package/src/common.ts +39 -2
  230. package/src/generated/blog.entry.ts +39 -7
  231. package/src/generated/docs.entry.ts +39 -7
  232. package/src/generated/frequentQuestions.entry.ts +39 -7
  233. package/src/generated/legal.entry.ts +39 -7
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-06-07
3
+ updatedAt: 2026-08-09
4
4
  title: i18n 번들 크기 및 성능 최적화
5
5
  description: 국제화(i18n) 콘텐츠를 최적화하여 애플리케이션 번들 크기를 줄이세요. Intlayer를 통해 사전(dictionary)의 트리 쉐이킹(tree shaking)과 지연 로딩(lazy loading)을 활용하는 방법을 알아봅니다.
6
6
  keywords:
@@ -16,6 +16,12 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 9.2.1
20
+ date: 2026-08-09
21
+ changes: "`purge`와 `minify`가 이제 `@intlayer/swc`를 통해 Next.js에서 동작합니다 — `babel.config.js`가 필요 없습니다"
22
+ - version: 8.12.0
23
+ date: 2026-06-24
24
+ changes: "참조 표에서 Babel 플러그인을 필수 파이프라인 순서(extract → purge → minify → optimize)로 나열"
19
25
  - version: 8.12.0
20
26
  date: 2026-06-07
21
27
  changes: "Babel/Webpack용 `intlayerPurgeBabelPlugin` 및 `intlayerMinifyBabelPlugin` 추가, 플러그인 파이프라인 명확화"
@@ -191,12 +197,14 @@ Intlayer의 빌드 최적화는 각각 단일 책임을 갖는 여러 개별 플
191
197
 
192
198
  이들은 Webpack 기반 설정(Babel을 사용하는 Next.js, CRA, 커스텀 Webpack 등)의 `babel.config.js`에서 직접 사용됩니다.
193
199
 
200
+ 아래 표는 필수 파이프라인 순서(즉 `babel.config.js`에 나타나야 하는 순서와 동일)로 나열합니다:
201
+
194
202
  | 플러그인 | 기능 |
195
203
  | :---------------------------- | :----------------------------------------------------------------------------------------------------------------- |
196
204
  | `intlayerExtractBabelPlugin` | `.content.ts` 파일을 스캔하여 컴파일된 사전을 `.intlayer/`에 작성합니다. |
197
- | `intlayerOptimizeBabelPlugin` | `useIntlayer('key')`를 `useDictionary(hash)`로 재작성하고 일치하는 사전의 `import`를 주입합니다. |
198
205
  | `intlayerPurgeBabelPlugin` | 모든 소스 파일을 스캔하여 컴파일된 `.intlayer/**/*.json` 사전 파일에서 **사용되지 않는 콘텐츠 필드**를 제거합니다. |
199
206
  | `intlayerMinifyBabelPlugin` | JSON 파일과 소스 코드 모두에서 **콘텐츠 필드 키를 짧은 알파벳 별칭**(`title` → `a`)으로 **이름을 변경**합니다. |
207
+ | `intlayerOptimizeBabelPlugin` | `useIntlayer('key')`를 `useDictionary(hash)`로 재작성하고 일치하는 사전의 `import`를 주입합니다. |
200
208
 
201
209
  > **플러그인 순서가 중요합니다.** `babel.config.js`에서 purge 및 minify 플러그인은 optimize 플러그인 **앞에** 나타나야 합니다. optimize 패스는 `useIntlayer('key')`를 불투명한 `useDictionary(hash)` 호출로 대체하여 purge 및 minify 패스가 어떤 필드가 사용되는지 식별하는 데 필요한 사전 키 정보를 지웁니다.
202
210
 
@@ -205,9 +213,9 @@ Intlayer의 빌드 최적화는 각각 단일 책임을 갖는 여러 개별 플
205
213
  | 옵션 헬퍼 | 사용하는 플러그인 |
206
214
  | :--------------------------- | :---------------------------- |
207
215
  | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
208
- | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
209
216
  | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
210
217
  | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
218
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
211
219
 
212
220
  ### Vite 플러그인 (`vite-intlayer`)
213
221
 
@@ -220,6 +228,20 @@ Vite 사용자는 **이를 직접 구성하지 않습니다**. `vite.config.ts`
220
228
  | Dictionary minify | `intlayerMinifyBabelPlugin`의 JSON 작성 패스와 동일 |
221
229
  | Babel transform | `intlayerMinifyBabelPlugin`의 소스 코드 이름 변경 + `intlayerOptimizeBabelPlugin`과 동일 |
222
230
 
231
+ ### SWC 플러그인 (`@intlayer/swc`)
232
+
233
+ Next.js 사용자도 **이것들을 직접 설정하지 않습니다**. **v9.2.1**부터 `next.config.ts`의 `withIntlayer()`가 `build.purge`와 `build.minify` 플래그만으로 퍼지, 압축, 임포트 재작성이라는 전체 파이프라인을 실행합니다.
234
+
235
+ SWC Wasm 플러그인은 한 번에 한 파일만 변환하고 파일 시스템에 접근할 수 없기 때문에 작업이 둘로 나뉩니다:
236
+
237
+ | 패스 | 실행 위치 | 하는 일 |
238
+ | :----------------------------------- | :-------------------------- | :---------------------------------------------------------------------------------------------- |
239
+ | 사용 분석 + JSON 퍼지/압축 | Node, `withIntlayer()` 내부 | 모든 컴포넌트 소스 파일을 읽고 `.intlayer/**/*.json`을 재작성하며 이름 변경 테이블을 생성합니다 |
240
+ | 소스 재작성 (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | 이름 변경 테이블을 코드의 해당 속성 접근에 적용합니다 |
241
+ | 임포트 재작성 (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | `intlayerOptimizeBabelPlugin`과 동일 |
242
+
243
+ _어떤_ 필드가 사용되지 않는지, 각 필드가 _어떤_ 별칭을 받을지 결정하려면 파일 간 상태와 파일 I/O가 필요하므로 그 절반은 Node에서 실행되며, SWC 플러그인은 결과 테이블만 전달받습니다.
244
+
223
245
  ## 플랫폼별 설정
224
246
 
225
247
  <Tabs>
@@ -227,10 +249,12 @@ Vite 사용자는 **이를 직접 구성하지 않습니다**. `vite.config.ts`
227
249
 
228
250
  ### Next.js
229
251
 
230
- Next.js는 빌드 SWC를 사용하므로 optimize(가져오기 재작성) 패스를 위해 `@intlayer/swc` 플러그인이 필요합니다.
252
+ Next.js는 빌드에 SWC를 사용하므로 `@intlayer/swc` 플러그인이 필요합니다. **v9.2.1**부터 이 하나의 패키지가 최적화(임포트 재작성), 퍼지, 압축 전체 파이프라인을 담당합니다.
231
253
 
232
254
  > Next.js에서 SWC 플러그인이 아직 실험 단계이므로 이 플러그인은 기본적으로 설치되지 않습니다. 향후 변경될 수 있습니다.
233
255
 
256
+ > **Next.js 16.1.0이 최소 버전입니다.** SWC의 상위 호환 Wasm 플러그인 ABI 위에 구축된 첫 릴리스이며, 이전 릴리스는 플러그인을 거부합니다. `withIntlayer`는 프로젝트의 Next.js 버전을 읽고 16.1.0 미만에서는 플러그인을 아예 등록하지 않습니다 — 해당 빌드는 여전히 성공하며 단지 번들 최적화 없이 실행됩니다.
257
+
234
258
  <Tabs>
235
259
  <Tab value="npm">
236
260
 
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
265
289
 
266
290
  설치되면 Intlayer가 플러그인을 자동으로 감지하여 사용합니다.
267
291
 
268
- **purge minify** 패스(필드 제거 및 필드 이름 변경) 경우 `@intlayer/babel`을 함께 설치하고 Babel 플러그인을 추가합니다. Next.js 변환을 위해 SWC를 사용하지만 플러그인 구성을 위해 `babel.config.js`를 계속 평가하므로 Babel 플러그인은 SWC 이전의 사전 패스(pre-pass)로 실행됩니다.
292
+ **퍼지와 압축** 패스(필드 제거 및 필드 이름 변경)에는 추가 패키지도 `babel.config.js`도 필요하지 않습니다. 설정을 `withIntlayer`로 감싸고 `intlayer.config.ts`에서 플래그를 켜십시오:
269
293
 
270
- ```bash packageManager="npm"
271
- npm install -D @intlayer/babel
294
+ ```typescript fileName="next.config.ts"
295
+ import { withIntlayer } from "next-intlayer/server";
296
+ import type { NextConfig } from "next";
297
+
298
+ const nextConfig: NextConfig = {/* 당신의 설정 */};
299
+
300
+ export default withIntlayer(nextConfig);
272
301
  ```
273
302
 
274
- ```javascript fileName="babel.config.js"
275
- const {
276
- intlayerPurgeBabelPlugin,
277
- intlayerMinifyBabelPlugin,
278
- getPurgePluginOptions,
279
- getMinifyPluginOptions,
280
- } = require("@intlayer/babel");
303
+ ```typescript fileName="intlayer.config.ts"
304
+ import type { IntlayerConfig } from "intlayer";
281
305
 
282
- module.exports = {
283
- presets: ["next/babel"],
284
- plugins: [
285
- // Purge: .intlayer/**/*.json에서 사용되지 않는 콘텐츠 필드 제거
286
- [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
287
- // Minify: JSON + 소스 코드에서 콘텐츠 필드 키의 이름 변경
288
- [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
289
- // 주의: @intlayer/swc가 useIntlayer → useDictionary 재작성을 처리하므로
290
- // intlayerOptimizeBabelPlugin은 여기서 필요하지 않습니다.
291
- ],
306
+ const config: IntlayerConfig = {
307
+ build: {
308
+ purge: true, // 번들된 JSON에서 사용되지 않는 콘텐츠 필드를 제거합니다
309
+ minify: true, // 콘텐츠 필드 키를 짧은 별칭으로 변경합니다
310
+ },
292
311
  };
312
+
313
+ export default config;
293
314
  ```
294
315
 
316
+ `next build` 동안 `withIntlayer`가 소스를 분석하고 컴파일된 사전을 재작성한 뒤, 생성된 필드 이름 변경 테이블을 `@intlayer/swc`에 전달하면 플러그인이 코드의 해당 속성 접근을 갱신합니다.
317
+
318
+ > `withIntlayerSync`가 아니라 비동기 `withIntlayer`를 사용하십시오. 동기 버전은 분석 파이프라인을 실행하지 않으므로 퍼지와 압축이 적용되지 않습니다.
319
+
320
+ > 퍼지와 압축은 `next build`에서만 실행됩니다 — 최적화 파이프라인은 `next dev` 중에는 꺼져 있습니다.
321
+
322
+ > 호환 어댑터 호출자가 설정된 경우에도 비활성화됩니다(`swcExtraCallers`, `@intlayer/next-intl`이나 `@intlayer/react-i18next` 같은 호환 패키지가 설정합니다). 이러한 호출 지점은 사용 분석기에 보이지 않으므로 퍼지하면 코드가 여전히 읽는 필드를 제거하게 됩니다. 임포트 재작성은 계속 활성 상태로 유지됩니다.
323
+
324
+ **이전 버전(9.2.1 이전)** 에서는 `@intlayer/babel`과 `intlayerPurgeBabelPlugin` 및 `intlayerMinifyBabelPlugin`을 선언하는 `babel.config.js`가 필요했습니다. 이 파일은 더 이상 필요하지 않으며 삭제할 수 있습니다.
325
+
295
326
  </Tab>
296
327
  <Tab value="vite">
297
328
 
@@ -447,6 +478,8 @@ export default config;
447
478
 
448
479
  > `optimize`가 `false`이거나 `editor.enabled`가 `true`일 때(비주얼 에디터에서는 편집을 위해 원본 필드 이름이 필요함) 최소화는 건너뜁니다.
449
480
 
481
+ > Next.js에서는 `@intlayer/swc`가 설치되지 않았거나 로드할 수 없는 경우(16.1.0 미만의 Next.js)에도 압축이 건너뛰어집니다. 소스 접근을 재작성하는 쪽이 바로 이 플러그인이므로, 이것 없이 사전만 이름을 바꾸면 코드가 더 이상 존재하지 않는 필드 이름을 읽게 됩니다.
482
+
450
483
  > `importMode: 'fetch'`를 통해 로드된 사전에서도 최소화는 건너뜁니다. JSON이 원본 필드 이름을 사용하여 원격 API에서 제공되기 때문입니다(클라이언트 측 키의 이름을 변경하면 서버/클라이언트 규약이 깨짐).
451
484
 
452
485
  ### 파지 (사용하지 않는 필드 제거)
@@ -475,7 +508,7 @@ export default config;
475
508
  { "title": "…", "subtitle": "…" }
476
509
  ```
477
510
 
478
- > `optimize`가 `false`이거나 `editor.enabled`가 `true`일 때 파지(purge)는 건너뜁니다.
511
+ > `optimize`가 `false`이거나 `editor.enabled`가 `true`일 때 파지(purge)는 건너뜁니다. Next.js에서는 `@intlayer/swc`를 사용할 수 없을 때, 그리고 호환 어댑터 호출자가 설정된 경우에도 추가로 건너뜁니다.
479
512
 
480
513
  > 소스 파일을 구문 분석할 수 없거나 `useIntlayer`의 결과가 변수에 할당되고 정적 분석기가 추적할 수 없는 방식으로 전달될 때(예: 객체에 스프레드, 구조 분해 없이 prop으로 전달) 파지도 보수적으로 건너뜁니다. 이런 경우에는 전체 사전이 유지됩니다.
481
514
 
@@ -404,7 +404,7 @@ const config: IntlayerConfig = {
404
404
  ai: {
405
405
  /**
406
406
  * 사용할 AI 프로바이더.
407
- * 옵션: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'
407
+ * 옵션: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio', 'moonshotai'
408
408
  * 기본값: 'openai'
409
409
  */
410
410
  provider: "openai",
@@ -1032,15 +1032,15 @@ Intlayer는 최대의 유연성을 보장하기 위해 다양한 AI 프로바이
1032
1032
  - **Together.ai**
1033
1033
  - **LM Studio**
1034
1034
 
1035
- | 필드 | 설명 | 타입 | 기본값 | 예시 | 참고 |
1036
- | -------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
1037
- | `provider` | Intlayer AI 기능에 사용할 프로바이더. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` | `undefined` | `'anthropic'` | 여러 프로바이더는 서로 다른 API 키가 필요하며 가격 구조도 다릅니다. |
1038
- | `model` | AI 기능에 사용할 AI 모델. | `string` | 없음 | `'gpt-4o-2024-11-20'` | 특정 모델은 프로바이더에 따라 다릅니다. |
1039
- | `temperature` | AI 응답의 무작위성을 제어합니다. | `number` | 없음 | `0.1` | 온도가 높을수록 창의적이지만 신뢰성이 낮아집니다. |
1040
- | `apiKey` | 선택한 프로바이더의 API 키. | `string` | 없음 | `process.env.OPENAI_API_KEY` | 비밀로 유지해야 하며 환경 변수를 사용하세요. |
1041
- | `applicationContext` | AI가 더 정확한 번역을 생성할 수 있도록 돕는 애플리케이션에 대한 추가 컨텍스트(도메인, 대상 고객, 어조, 용어 등). | `string` | 없음 | `'my custom app context'` | 규칙을 추가하는 데 사용할 수 있습니다 (예: `"URL은 번역하지 마세요"` ). |
1042
- | `baseURL` | AI API에 대한 기본 URL. | `string` | 없음 | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | 로컬 또는 맞춤형 AI API 엔드포인트를 가리킬 수 있습니다. |
1043
- | `dataSerialization` | AI 기능에 대한 데이터 직렬화 형식. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: 기본값, 안정적임; 더 많은 토큰 소비.<br/>• `'toon'`: 더 적은 토큰 소모, 덜 안정적임.<br/>• 모델에 로직 실행을 위한 추가 파라미터(추론 노력(reasoning effort) 등)를 전달합니다. |
1035
+ | 필드 | 설명 | 타입 | 기본값 | 예시 | 참고 |
1036
+ | -------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
1037
+ | `provider` | Intlayer AI 기능에 사용할 프로바이더. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` &#124; <br/> `'moonshotai'` | `undefined` | `'anthropic'` | 여러 프로바이더는 서로 다른 API 키가 필요하며 가격 구조도 다릅니다. |
1038
+ | `model` | AI 기능에 사용할 AI 모델. | `string` | 없음 | `'gpt-4o-2024-11-20'` | 특정 모델은 프로바이더에 따라 다릅니다. |
1039
+ | `temperature` | AI 응답의 무작위성을 제어합니다. | `number` | 없음 | `0.1` | 온도가 높을수록 창의적이지만 신뢰성이 낮아집니다. |
1040
+ | `apiKey` | 선택한 프로바이더의 API 키. | `string` | 없음 | `process.env.OPENAI_API_KEY` | 비밀로 유지해야 하며 환경 변수를 사용하세요. |
1041
+ | `applicationContext` | AI가 더 정확한 번역을 생성할 수 있도록 돕는 애플리케이션에 대한 추가 컨텍스트(도메인, 대상 고객, 어조, 용어 등). | `string` | 없음 | `'my custom app context'` | 규칙을 추가하는 데 사용할 수 있습니다 (예: `"URL은 번역하지 마세요"` ). |
1042
+ | `baseURL` | AI API에 대한 기본 URL. | `string` | 없음 | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | 로컬 또는 맞춤형 AI API 엔드포인트를 가리킬 수 있습니다. |
1043
+ | `dataSerialization` | AI 기능에 대한 데이터 직렬화 형식. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: 기본값, 안정적임; 더 많은 토큰 소비.<br/>• `'toon'`: 더 적은 토큰 소모, 덜 안정적임.<br/>• 모델에 로직 실행을 위한 추가 파라미터(추론 노력(reasoning effort) 등)를 전달합니다. |
1044
1044
 
1045
1045
  ---
1046
1046
 
@@ -207,7 +207,7 @@ export const ComponentExample = () => {
207
207
  이러한 방식을 적용하면 다음과 같은 혁신적인 효과를 얻을 수 있습니다:
208
208
 
209
209
  1. **개발 생산성의 대폭 향상**
210
- - `.content.{{ts|mjs|cjs|json}}` 파일 선언을 돕는 VSCode 공식 확장 프로그램 지원
210
+ - `.content.{ts|js|mjs|cjs|json|tsx|jsx|md|mdx|yaml|yml}` 파일 선언을 돕는 VSCode 공식 확장 프로그램 지원
211
211
  - IDE의 AI 자동완성 도구(예: GitHub Copilot)가 문맥을 정확히 파악하여 콘텐츠 선언을 도와 복사/붙여넣기 수작업이 극적으로 축소됨
212
212
 
213
213
  2. **청결한 코드베이스 유지**
@@ -231,27 +231,27 @@ export const ComponentExample = () => {
231
231
 
232
232
  ## Intlayer의 추가 기능
233
233
 
234
- | 기능 | 설명 |
235
- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
236
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/frameworks.png?raw=true) | **크로스 프레임워크 범용 지원**<br><br>Intlayer는 Next.js, React, Vite, Vue.js, Nuxt, Preact, Express 등 다양한 대중적인 프레임워크 및 라이브러리와 완벽하게 호환됩니다. |
237
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.jpg?raw=true) | **JavaScript 구문 기반의 동적 콘텐츠 관리**<br><br>JavaScript/TypeScript의 높은 유연성을 활용하여 복잡하고 세련된 콘텐츠 구조를 효율적으로 구성할 수 있습니다. <br><br> - [콘텐츠 선언 가이드](https://intlayer.org/doc/concept/content) |
238
- | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/compiler.jpg?raw=true" alt="Feature" width="700"> | **지능형 컴파일러**<br><br>Intlayer 컴파일러는 프로젝트 소스 코드에서 다국어 콘텐츠를 자동으로 분석 및 추출하여 최적화된 사전 파일을 빌드합니다.<br><br> - [컴파일러 기술 문서](https://intlayer.org/doc/compiler) |
239
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/per_locale_content_declaration_file.png?raw=true) | **언어별 독립 선언 파일 기능**<br><br>각 언어별 콘텐츠 선언을 분리함으로써 정밀하고 깔끔하게 파일 구조를 분할 및 확장할 수 있습니다.<br><br> - [언어별 파일 가이드](https://intlayer.org/doc/concept/per-locale-file) |
240
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true) | **엄격한 타입 안전성 보장**<br><br>TypeScript의 강력한 타입 체크를 활용해 휴먼 에러를 완전 차단하고, IDE에서 제공하는 최적의 사전 키 자동완성 힌트를 활용해 보세요.<br><br> - [TypeScript 설정 가이드](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
241
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/config_file.png?raw=true) | **직관적인 설정 및 시작**<br><br>최소한의 기본 구문 설정으로 앱을 신속히 배포해 보세요. 라우팅, 국제화, 빌드 및 콘텐츠 분석과 관련된 전반적인 제어가 편리합니다. <br><br> - [Next.js 통합 알아보기](https://intlayer.org/doc/environment/nextjs) |
242
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/content_retrieval.png?raw=true) | **간편한 콘텐츠 조회**<br><br>자잘한 구문마다 매번 수동으로 `t` 번역 헬퍼를 결합하지 않아도 됩니다. 통합 훅(Hook)을 결합해 필요한 범위의 콘텐츠 딕셔너리를 단번에 인출할 수 있습니다.<br><br> - [React 통합 레퍼런스](https://intlayer.org/doc/environment/create-react-app) |
243
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/server_component.png?raw=true) | **일관된 서버 컴포넌트 설계**<br><br>Next.js 서버 컴포넌트(RSC)에 최적화된 아키텍처로, 클라이언트 사이드와 서버 사이드 모두 동일한 훅과 구문 형태를 적용할 수 있어 번거롭게 `t` 함수를 컴포넌트 트리에 수동 전달할 필요가 없습니다. <br><br> - [서버 컴포넌트 가이드](https://intlayer.org/doc/environment/nextjs#step-7-utilize-content-in-your-code) |
244
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/file_tree.png?raw=true) | **고도로 조직화된 코드베이스**<br><br>코드 설계를 간결하게 분리합니다: 1 기능 컴포넌트 폴더 내에 해당 사전 딕셔너리가 결합되어 높은 가독성을 유도합니다. <br><br> - [Intlayer 작동 개념](https://intlayer.org/doc/concept/how-works-intlayer) |
245
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/url_routing.png?raw=true) | **강력한 로컬라이즈 라우팅**<br><br>경로 다국어 처리를 기본 탑재하여 Next.js, React, Vite, Vue.js 등을 활용해 복잡하게 얽힌 하위 페이지 주소를 정교하게 분리해 줍니다.<br><br> - [Next.js 통합 가이드](https://intlayer.org/doc/environment/nextjs) |
246
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/markdown.png?raw=true) | **Markdown 기본 연동**<br><br>서비스 약관, 법적 공지, 테크니컬 가이드 등 텍스트 서식이 가미된 Markdown 파일 처리를 기본 제공하여, 프론트 코드 내에서 서식 및 메타데이터를 정밀히 매핑할 수 있습니다.<br><br> - [Markdown 활용 가이드](https://intlayer.org/doc/concept/content/file) |
247
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/visual_editor.png?raw=true) | **무료 비주얼 에디터 & 헤드리스 CMS**<br><br>마케터, 기획자, 번역가 등 비개발 협업자가 직관적으로 텍스트를 고칠 수 있는 비주얼 편집 도구와 CMS를 무료 제공합니다. Git 동기화 또는 CMS 원격 결합 방식을 유연하게 설정할 수 있습니다.<br><br> - [비주얼 에디터 문서](https://intlayer.org/doc/concept/editor) <br> - [헤드리스 CMS 문서](https://intlayer.org/doc/concept/cms) |
248
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.png?raw=true) | **Tree-shaking 지원을 통한 초경량 배포**<br><br>빌드 시점에 사용하지 않는 언어와 사전을 완벽히 배포 대상에서 쳐내어 최종 번들 용량을 획기적으로 낮춥니다. 모듈별 레이지 로딩을 원활하게 수행합니다. <br><br> - [빌드 최적화 알아보기](https://intlayer.org/doc/concept/how-works-intlayer#app-build-optimization) |
249
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/static_rendering.png?raw=true) | **정적 정밀 렌더링(SSG) 최적화**<br><br>정적 생성(Static Rendering) 모듈 작동을 방해하지 않고 부드럽게 작동합니다. <br><br> - [Next.js 정적 빌드](https://intlayer.org/doc/environment/nextjs) |
250
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/AI_translation.png?raw=true) | **원클릭 지능형 AI 번역**<br><br>개발자가 직접 등록한 AI 프로바이더 구성을 바탕으로, CLI 한 번으로 최대 231개 이상의 전 세계 로케일 번역을 자동으로 일괄 적용해 줍니다. <br><br> - [CI/CD 자동 번역](https://intlayer.org/doc/concept/ci-cd) <br> - [Intlayer CLI 연동](https://intlayer.org/doc/concept/cli) <br> - [자동 채우기](https://intlayer.org/doc/concept/auto-fill) |
251
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/mcp.png?raw=true) | **MCP 서버 연동**<br><br>에디터 자동화 표준 프로토콜인 MCP(Model Context Protocol) 서버를 탑재하여, IDE 개발 보조 인공지능이 코드 번역 작업을 훨씬 능동적이고 정확하게 제어하도록 지원합니다. <br><br> - [MCP 서버 정보](https://github.com/aymericzip/intlayer/blob/main/docs/ko/mcp_server.md) |
252
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/vscode_extension.png?raw=true) | **VSCode 공식 확장 프로그램**<br><br>사전 딕셔너리 관리, 자동 번역 결합 및 사전 빌드 상태 확인 등을 돕는 전용 에디터 확장을 연동해 보세요. <br><br> - [에디터 확장 프로그램](https://intlayer.org/doc/vs-code-extension) |
253
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/interoperability.png?raw=true) | **높은 상호 운용성**<br><br>기존 react-i18next, next-i18next, next-intl, react-intl 등 기존 모듈 규격에서 손쉽게 마이그레이션하거나 공존할 수 있는 통합 API를 구축했습니다. <br><br> - [react-intl 연동](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [next-intl 연동](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [next-i18next 연동](https://intlayer.org/blog/intlayer-with-next-i18next) |
254
- | 번역 누락 테스트(CLI/CI) | ✅ CLI: npx intlayer content test (CI 친화적인 자동 진단) |
234
+ | 기능 | 설명 |
235
+ | ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
236
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/frameworks.png?raw=true) | **크로스 프레임워크 범용 지원**<br><br>Intlayer는 Next.js, React, Vite, Vue.js, Nuxt, Preact, Express 등 다양한 대중적인 프레임워크 및 라이브러리와 완벽하게 호환됩니다. |
237
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.jpg?raw=true) | **JavaScript 구문 기반의 동적 콘텐츠 관리**<br><br>JavaScript/TypeScript의 높은 유연성을 활용하여 복잡하고 세련된 콘텐츠 구조를 효율적으로 구성할 수 있습니다. <br><br> - [콘텐츠 선언 가이드](https://intlayer.org/doc/concept/content) |
238
+ | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/compiler.jpg?raw=true" alt="Feature" width="700"> | **지능형 컴파일러**<br><br>Intlayer 컴파일러는 프로젝트 소스 코드에서 다국어 콘텐츠를 자동으로 분석 및 추출하여 최적화된 사전 파일을 빌드합니다.<br><br> - [컴파일러 기술 문서](https://intlayer.org/doc/compiler) |
239
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/per_locale_content_declaration_file.png?raw=true) | **언어별 독립 선언 파일 기능**<br><br>각 언어별 콘텐츠 선언을 분리함으로써 정밀하고 깔끔하게 파일 구조를 분할 및 확장할 수 있습니다.<br><br> - [언어별 파일 가이드](https://intlayer.org/doc/concept/per-locale-file) |
240
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true) | **엄격한 타입 안전성 보장**<br><br>TypeScript의 강력한 타입 체크를 활용해 휴먼 에러를 완전 차단하고, IDE에서 제공하는 최적의 사전 키 자동완성 힌트를 활용해 보세요.<br><br> - [TypeScript 설정 가이드](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
241
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/config_file.png?raw=true) | **직관적인 설정 및 시작**<br><br>최소한의 기본 구문 설정으로 앱을 신속히 배포해 보세요. 라우팅, 국제화, 빌드 및 콘텐츠 분석과 관련된 전반적인 제어가 편리합니다. <br><br> - [Next.js 통합 알아보기](https://intlayer.org/doc/environment/nextjs) |
242
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/content_retrieval.png?raw=true) | **간편한 콘텐츠 조회**<br><br>자잘한 구문마다 매번 수동으로 `t` 번역 헬퍼를 결합하지 않아도 됩니다. 통합 훅(Hook)을 결합해 필요한 범위의 콘텐츠 딕셔너리를 단번에 인출할 수 있습니다.<br><br> - [React 통합 레퍼런스](https://intlayer.org/doc/environment/create-react-app) |
243
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/server_component.png?raw=true) | **일관된 서버 컴포넌트 설계**<br><br>Next.js 서버 컴포넌트(RSC)에 최적화된 아키텍처로, 클라이언트 사이드와 서버 사이드 모두 동일한 훅과 구문 형태를 적용할 수 있어 번거롭게 `t` 함수를 컴포넌트 트리에 수동 전달할 필요가 없습니다. <br><br> - [서버 컴포넌트 가이드](https://intlayer.org/doc/environment/nextjs#step-7-utilize-content-in-your-code) |
244
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/file_tree.png?raw=true) | **고도로 조직화된 코드베이스**<br><br>코드 설계를 간결하게 분리합니다: 1 기능 컴포넌트 폴더 내에 해당 사전 딕셔너리가 결합되어 높은 가독성을 유도합니다. <br><br> - [Intlayer 작동 개념](https://intlayer.org/doc/concept/how-works-intlayer) |
245
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/url_routing.png?raw=true) | **강력한 로컬라이즈 라우팅**<br><br>경로 다국어 처리를 기본 탑재하여 Next.js, React, Vite, Vue.js 등을 활용해 복잡하게 얽힌 하위 페이지 주소를 정교하게 분리해 줍니다.<br><br> - [Next.js 통합 가이드](https://intlayer.org/doc/environment/nextjs) |
246
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/markdown.png?raw=true) | **Markdown 기본 연동**<br><br>서비스 약관, 법적 공지, 테크니컬 가이드 등 텍스트 서식이 가미된 Markdown 파일 처리를 기본 제공하여, 프론트 코드 내에서 서식 및 메타데이터를 정밀히 매핑할 수 있습니다.<br><br> - [Markdown 활용 가이드](https://intlayer.org/doc/concept/content/file) |
247
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/visual_editor.png?raw=true) | **무료 비주얼 에디터 & 헤드리스 CMS**<br><br>마케터, 기획자, 번역가 등 비개발 협업자가 직관적으로 텍스트를 고칠 수 있는 비주얼 편집 도구와 CMS를 무료 제공합니다. Git 동기화 또는 CMS 원격 결합 방식을 유연하게 설정할 수 있습니다.<br><br> - [비주얼 에디터 문서](https://intlayer.org/doc/concept/editor) <br> - [헤드리스 CMS 문서](https://intlayer.org/doc/concept/cms) |
248
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.png?raw=true) | **Tree-shaking 지원을 통한 초경량 배포**<br><br>빌드 시점에 사용하지 않는 언어와 사전을 완벽히 배포 대상에서 쳐내어 최종 번들 용량을 획기적으로 낮춥니다. 모듈별 레이지 로딩을 원활하게 수행합니다. <br><br> - [빌드 최적화 알아보기](https://intlayer.org/doc/concept/how-works-intlayer#app-build-optimization) |
249
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/static_rendering.png?raw=true) | **정적 정밀 렌더링(SSG) 최적화**<br><br>정적 생성(Static Rendering) 모듈 작동을 방해하지 않고 부드럽게 작동합니다. <br><br> - [Next.js 정적 빌드](https://intlayer.org/doc/environment/nextjs) |
250
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/AI_translation.png?raw=true) | **원클릭 지능형 AI 번역**<br><br>개발자가 직접 등록한 AI 프로바이더 구성을 바탕으로, CLI 한 번으로 최대 231개 이상의 전 세계 로케일 번역을 자동으로 일괄 적용해 줍니다. <br><br> - [CI/CD 자동 번역](https://intlayer.org/doc/concept/ci-cd) <br> - [Intlayer CLI 연동](https://intlayer.org/doc/concept/cli) <br> - [자동 채우기](https://intlayer.org/doc/concept/auto-fill) |
251
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/mcp.png?raw=true) | **MCP 서버 연동**<br><br>에디터 자동화 표준 프로토콜인 MCP(Model Context Protocol) 서버를 탑재하여, IDE 개발 보조 인공지능이 코드 번역 작업을 훨씬 능동적이고 정확하게 제어하도록 지원합니다. <br><br> - [MCP 서버 정보](https://github.com/aymericzip/intlayer/blob/main/docs/ko/mcp_server.md) |
252
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/vscode_extension.png?raw=true) | **VSCode 공식 확장 프로그램**<br><br>사전 딕셔너리 관리, 자동 번역 결합 및 사전 빌드 상태 확인 등을 돕는 전용 에디터 확장을 연동해 보세요. <br><br> - [에디터 확장 프로그램](https://intlayer.org/doc/vs-code-extension) |
253
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/interoperability.png?raw=true) | **높은 상호 운용성**<br><br>기존 react-i18next, next-i18next, next-intl, react-intl 등 기존 모듈 규격에서 손쉽게 마이그레이션하거나 공존할 수 있는 통합 API를 구축했습니다. <br><br> - [react-intl 연동](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [next-intl 연동](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [next-i18next 연동](https://intlayer.org/blog/intlayer-with-next-i18next) <br> - [Intlayer 호환 어댑터](https://intlayer.org/doc/compatibility) |
254
+ | 번역 누락 테스트(CLI/CI) | ✅ CLI: npx intlayer content test (CI 친화적인 자동 진단) |
255
255
 
256
256
  ## Intlayer와 다른 솔루션 비교
257
257
 
@@ -290,3 +290,5 @@ GitHub Star 수는 프로젝트의 인지도, 커뮤니티의 신뢰도 및 장
290
290
  `intlayer`는 기존의 `react-intl`, `react-i18next`, `next-intl`, `next-i18next` 및 `vue-i18n` 사전 네임스페이스들을 동시에 손쉽게 지배하고 가공하도록 지원합니다.
291
291
 
292
292
  `intlayer` 문법 형태로 다국어를 간편히 선언만 해두면, intlayer가 번거롭고 복잡한 기존 프레임워크 규격(예: `/messages/{{locale}}/{{namespace}}.json`)에 맞춰 빌드 타임에 자동으로 사전 파일을 추출 및 변환해 줍니다.
293
+
294
+ 현재 사용 중인 i18n 라이브러리의 API를 그대로 유지하고 싶다면, `intlayer`는 **호환 어댑터(compat adapters)** 도 제공합니다. `react-i18next`, `next-intl`, `react-intl`, `vue-i18n` 등과 완전히 동일한 API를 노출하지만, 실제 콘텐츠는 Intlayer 사전에서 제공되는 패키지입니다. 덕분에 코드를 다시 작성하지 않고 점진적으로 마이그레이션할 수 있습니다. [호환 어댑터 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/compat/index.md)를 참고하세요.
@@ -404,7 +404,7 @@ export const getLocale = (event: RequestEvent): Locale => {
404
404
  };
405
405
  ```
406
406
 
407
- > `getLocaleFromStorage`는 구성에 따라 헤더 또는 쿠키에서 로케일을 확인합니다. 자세한 내용은 [Configuration](https://intlayer.org/doc/configuration) 문서를 참조하세요.
407
+ > `getLocaleFromStorage`는 구성에 따라 헤더 또는 쿠키에서 로케일을 확인합니다. 자세한 내용은 [Configuration](https://intlayer.org/doc/concept/configuration) 문서를 참조하세요.
408
408
 
409
409
  > `localeDetector` 함수는 `Accept-Language` 헤더를 처리하여 가장 적합한 로케일을 반환합니다.
410
410
 
@@ -254,19 +254,21 @@ import {
254
254
  HeadContent,
255
255
  Scripts,
256
256
  createRootRouteWithContext,
257
+ getRouteApi,
257
258
  } from "@tanstack/solid-router";
258
259
  import { HydrationScript } from "solid-js/web";
259
260
  import { Suspense, type ParentComponent } from "solid-js";
260
261
  import { IntlayerProvider } from "solid-intlayer";
261
262
  import { defaultLocale, getHTMLTextDir } from "intlayer";
262
- import { Route as LocaleRoute } from "./{-$locale}/route";
263
+
264
+ const localeRoute = getRouteApi("/{-$locale}");
263
265
 
264
266
  export const Route = createRootRouteWithContext()({
265
267
  shellComponent: RootComponent,
266
268
  });
267
269
 
268
270
  const RootComponent: ParentComponent = (props) => {
269
- const params = LocaleRoute.useParams();
271
+ const params = localeRoute.useParams();
270
272
  const locale = params()?.locale ?? defaultLocale;
271
273
 
272
274
  return (
@@ -551,7 +553,7 @@ export default LocaleSwitcher;
551
553
 
552
554
  ```tsx fileName="src/routes/__root.tsx"
553
555
  const RootComponent: ParentComponent = (props) => {
554
- const params = LocaleRoute.useParams();
556
+ const params = localeRoute.useParams();
555
557
  const locale = params()?.locale ?? defaultLocale;
556
558
 
557
559
  return (
@@ -271,13 +271,15 @@ export default config;
271
271
  ```tsx fileName="src/routes/__root.tsx"
272
272
  import {
273
273
  createRootRouteWithContext,
274
+ getRouteApi,
274
275
  HeadContent,
275
276
  Scripts,
276
277
  } from "@tanstack/react-router";
277
278
  import { defaultLocale, getHTMLTextDir } from "intlayer";
278
279
  import { type ReactNode } from "react";
279
280
  import { IntlayerProvider } from "react-intlayer";
280
- import { Route as LocaleRoute } from "./{-$locale}/route";
281
+
282
+ const localeRoute = getRouteApi("/{-$locale}");
281
283
 
282
284
  export const Route = createRootRouteWithContext<{}>()({
283
285
  head: () => ({
@@ -299,7 +301,7 @@ export const Route = createRootRouteWithContext<{}>()({
299
301
  });
300
302
 
301
303
  function RootDocument({ children }: { children: ReactNode }) {
302
- const params = LocaleRoute.useParams();
304
+ const params = localeRoute.useParams();
303
305
  const locale = params?.locale ?? defaultLocale;
304
306
 
305
307
  return (
@@ -632,7 +634,7 @@ export const LocaleSwitcher: FC = () => {
632
634
 
633
635
  ```tsx fileName="src/routes/__root.tsx"
634
636
  function RootDocument({ children }: { children: ReactNode }) {
635
- const params = LocaleRoute.useParams();
637
+ const params = localeRoute.useParams();
636
638
  const locale = params?.locale ?? defaultLocale;
637
639
 
638
640
  return (
@@ -13,6 +13,10 @@ keywords:
13
13
  - Intlayer
14
14
  - Next.js
15
15
  - Vite
16
+ slugs:
17
+ - doc
18
+ - concept
19
+ - live-sync
16
20
  history:
17
21
  - version: 9.0.0
18
22
  date: 2026-07-08