@intlayer/docs 8.1.5 → 8.1.7

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 (81) hide show
  1. package/README.md +18 -9
  2. package/dist/cjs/generated/docs.entry.cjs +1 -1
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +1 -1
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +2 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/compiler.md +26 -0
  9. package/docs/ar/intlayer_with_nextjs_compiler.md +481 -0
  10. package/docs/ar/intlayer_with_vite+react_compiler.md +369 -0
  11. package/docs/ar/readme.md +138 -110
  12. package/docs/de/compiler.md +26 -0
  13. package/docs/de/intlayer_with_nextjs_compiler.md +481 -0
  14. package/docs/de/intlayer_with_vite+react_compiler.md +369 -0
  15. package/docs/de/readme.md +152 -124
  16. package/docs/en/compiler.md +27 -0
  17. package/docs/en/intlayer_with_nextjs_compiler.md +481 -0
  18. package/docs/en/intlayer_with_vite+react_compiler.md +368 -0
  19. package/docs/en/readme.md +129 -105
  20. package/docs/en-GB/compiler.md +26 -0
  21. package/docs/en-GB/intlayer_with_nextjs_compiler.md +481 -0
  22. package/docs/en-GB/intlayer_with_vite+react_compiler.md +369 -0
  23. package/docs/en-GB/readme.md +134 -108
  24. package/docs/es/compiler.md +26 -0
  25. package/docs/es/intlayer_with_nextjs_compiler.md +481 -0
  26. package/docs/es/intlayer_with_vite+react_compiler.md +369 -0
  27. package/docs/es/readme.md +149 -121
  28. package/docs/fr/compiler.md +26 -0
  29. package/docs/fr/intlayer_with_nextjs_compiler.md +481 -0
  30. package/docs/fr/intlayer_with_vite+react_compiler.md +369 -0
  31. package/docs/fr/readme.md +150 -122
  32. package/docs/hi/compiler.md +26 -0
  33. package/docs/hi/intlayer_with_nextjs_compiler.md +481 -0
  34. package/docs/hi/intlayer_with_vite+react_compiler.md +370 -0
  35. package/docs/hi/readme.md +153 -125
  36. package/docs/id/compiler.md +26 -0
  37. package/docs/id/intlayer_with_nextjs_compiler.md +481 -0
  38. package/docs/id/intlayer_with_vite+react_compiler.md +369 -0
  39. package/docs/id/readme.md +133 -105
  40. package/docs/it/compiler.md +26 -0
  41. package/docs/it/intlayer_with_nextjs_compiler.md +481 -0
  42. package/docs/it/intlayer_with_vite+react_compiler.md +374 -0
  43. package/docs/it/readme.md +155 -127
  44. package/docs/ja/compiler.md +26 -0
  45. package/docs/ja/intlayer_with_nextjs_compiler.md +481 -0
  46. package/docs/ja/intlayer_with_vite+react_compiler.md +369 -0
  47. package/docs/ja/readme.md +152 -126
  48. package/docs/ko/compiler.md +26 -0
  49. package/docs/ko/intlayer_with_nextjs_compiler.md +481 -0
  50. package/docs/ko/intlayer_with_vite+react_compiler.md +369 -0
  51. package/docs/ko/readme.md +154 -126
  52. package/docs/pl/compiler.md +26 -0
  53. package/docs/pl/intlayer_with_nextjs_compiler.md +481 -0
  54. package/docs/pl/intlayer_with_vite+react_compiler.md +369 -0
  55. package/docs/pl/readme.md +134 -106
  56. package/docs/pt/compiler.md +27 -1
  57. package/docs/pt/intlayer_with_nextjs_compiler.md +481 -0
  58. package/docs/pt/intlayer_with_vite+react_compiler.md +374 -0
  59. package/docs/pt/readme.md +154 -126
  60. package/docs/ru/compiler.md +26 -0
  61. package/docs/ru/intlayer_with_nextjs_compiler.md +481 -0
  62. package/docs/ru/intlayer_with_vite+react_compiler.md +369 -0
  63. package/docs/ru/readme.md +137 -109
  64. package/docs/tr/compiler.md +26 -0
  65. package/docs/tr/intlayer_with_nextjs_compiler.md +481 -0
  66. package/docs/tr/intlayer_with_vite+react_compiler.md +375 -0
  67. package/docs/tr/readme.md +139 -111
  68. package/docs/uk/compiler.md +26 -0
  69. package/docs/uk/intlayer_with_nextjs_compiler.md +481 -0
  70. package/docs/uk/intlayer_with_vite+react_compiler.md +369 -0
  71. package/docs/uk/readme.md +133 -109
  72. package/docs/vi/compiler.md +27 -1
  73. package/docs/vi/intlayer_with_nextjs_compiler.md +481 -0
  74. package/docs/vi/intlayer_with_vite+react_compiler.md +369 -0
  75. package/docs/vi/readme.md +138 -110
  76. package/docs/zh/compiler.md +26 -0
  77. package/docs/zh/intlayer_with_nextjs_compiler.md +481 -0
  78. package/docs/zh/intlayer_with_vite+react_compiler.md +372 -0
  79. package/docs/zh/readme.md +148 -120
  80. package/package.json +7 -8
  81. package/src/generated/docs.entry.ts +40 -0
@@ -0,0 +1,369 @@
1
+ ---
2
+ createdAt: 2024-03-07
3
+ updatedAt: 2025-12-30
4
+ title: Vite 및 React i18n - 기존 앱을 다국어 앱으로 변환하기 (i18n 가이드 2026)
5
+ description: Intlayer 컴파일러를 사용하여 기존 Vite 및 React 애플리케이션을 다국어화하는 방법을 알아보세요. 문서를 따라 국제화(i18n)를 수행하고 AI로 번역하세요.
6
+ keywords:
7
+ - 국제화
8
+ - 문서
9
+ - Intlayer
10
+ - Vite
11
+ - React
12
+ - 컴파일러
13
+ - AI
14
+ slugs:
15
+ - doc
16
+ - environment
17
+ - vite-and-react
18
+ - compiler
19
+ - AI
20
+ applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
21
+ youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
22
+ history:
23
+ - version: 8.1.6
24
+ date: 2026-02-23
25
+ changes: 초기 릴리스
26
+ ---
27
+
28
+ # 기존 Vite 및 React 애플리케이션을 나중에 다국어(i18n)로 만드는 방법 (i18n 가이드 2026)
29
+
30
+ <Tabs defaultTab="video">
31
+ <Tab label="비디오" value="video">
32
+
33
+ <iframe title="Vite와 React를 위한 최고의 i18n 솔루션? Intlayer 알아보기" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?si=VaKmrYMmXjo3xpk2"/>
34
+
35
+ </Tab>
36
+ <Tab label="코드" value="code">
37
+
38
+ <iframe
39
+ src="https://stackblitz.com/github/aymericzip/intlayer-vite-react-template?embed=1&ctl=1&file=intlayer.config.ts"
40
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
41
+ title="데모 CodeSandbox - Intlayer를 사용하여 애플리케이션을 국제화하는 방법"
42
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
43
+ loading="lazy"
44
+ />
45
+
46
+ </Tab>
47
+ </Tabs>
48
+
49
+ GitHub에서 [애플리케이션 템플릿](https://github.com/aymericzip/intlayer-vite-react-template)을 확인하세요.
50
+
51
+ ## 목차
52
+
53
+ <TOC/>
54
+
55
+ ## 왜 기존 애플리케이션을 국제화하는 것이 어려울까요?
56
+
57
+ 단 하나의 언어만 고려하여 빌드된 앱에 여러 언어를 추가하려고 시도해 본 적이 있다면 그 고통을 아실 것입니다. 단순히 "어려운" 것이 아니라 지루합니다. 모든 파일을 샅샅이 뒤져 모든 텍스트 문자열을 찾아내고 이를 별도의 사전 파일로 옮겨야 합니다.
58
+
59
+ 그다음 위험한 단계가 옵니다. 레이아웃이나 로직을 깨뜨리지 않고 모든 텍스트를 코드 훅으로 교체하는 것입니다. 이는 몇 주 동안 새로운 기능 개발을 중단시키고 끝없는 리팩토링처럼 느껴지는 작업입니다.
60
+
61
+ ## Intlayer 컴파일러란 무엇인가요?
62
+
63
+ **Intlayer 컴파일러**는 이러한 수동 작업을 건너뛰기 위해 만들어졌습니다. 사용자가 직접 문자열을 추출하는 대신 컴파일러가 대신 해줍니다. 코드를 스캔하고 텍스트를 찾아 AI를 사용하여 백그라운드에서 사전을 생성합니다.
64
+ 그런 다음 빌드 중에 코드를 수정하여 필요한 i18n 훅을 주입합니다. 기본적으로 앱을 단일 언어인 것처럼 계속 작성하면 컴파일러가 다국어 변환을 자동으로 처리합니다.
65
+
66
+ > 컴파일러 문서: [https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/compiler.md](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/compiler.md)
67
+
68
+ ### 제한 사항
69
+
70
+ 컴파일러는 **컴파일 타임**에 코드 분석 및 변환(훅 삽입 및 사전 생성)을 수행하므로 애플리케이션의 **빌드 프로세스가 느려질 수 있습니다**.
71
+
72
+ 개발 중 이러한 영향을 완화하기 위해 컴파일러를 [`'build-only'`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md) 모드로 실행하도록 구성하거나 필요하지 않을 때 비활성화할 수 있습니다.
73
+
74
+ ---
75
+
76
+ ## Vite 및 React 애플리케이션에서 Intlayer를 설정하기 위한 단계별 가이드
77
+
78
+ ### 1단계: 종속성 설치
79
+
80
+ npm을 사용하여 필요한 패키지를 설치합니다:
81
+
82
+ ```bash packageManager="npm"
83
+ npm install intlayer react-intlayer
84
+ npm install vite-intlayer --save-dev
85
+ npx intlayer init
86
+ ```
87
+
88
+ ```bash packageManager="pnpm"
89
+ pnpm add intlayer react-intlayer
90
+ pnpm add vite-intlayer --save-dev
91
+ pnpm intlayer init
92
+ ```
93
+
94
+ ```bash packageManager="yarn"
95
+ yarn add intlayer react-intlayer
96
+ yarn add vite-intlayer --save-dev
97
+ yarn intlayer init
98
+ ```
99
+
100
+ ```bash packageManager="bun"
101
+ bun add intlayer react-intlayer
102
+ bun add vite-intlayer --dev
103
+ bunx intlayer init
104
+ ```
105
+
106
+ - **intlayer**
107
+ 구성 관리, 번역, [콘텐츠 선언](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/dictionary/content_file.md), 트랜스파일 및 [CLI 명령](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/cli/index.md)을 위한 국제화 도구를 제공하는 핵심 패키지입니다.
108
+
109
+ - **react-intlayer**
110
+ Intlayer를 React 애플리케이션과 통합하는 패키지입니다. React 국제화를 위한 컨텍스트 프로바이더와 훅을 제공합니다.
111
+
112
+ - **vite-intlayer**
113
+ Intlayer를 [Vite 번들러](https://vite.dev/guide/why.html#why-bundle-for-production)와 통합하기 위한 Vite 플러그인과 사용자의 선호 로케일 감지, 쿠키 관리 및 URL 리디렉션 처리를 위한 미들웨어를 포함합니다.
114
+
115
+ ### 2단계: 프로젝트 구성
116
+
117
+ 애플리케이션의 언어를 구성하기 위한 설정 파일을 생성합니다:
118
+
119
+ ```typescript fileName="intlayer.config.ts"
120
+ import { Locales, type IntlayerConfig } from "intlayer";
121
+
122
+ const config: IntlayerConfig = {
123
+ internationalization: {
124
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, Locales.KOREAN],
125
+ defaultLocale: Locales.ENGLISH,
126
+ },
127
+ compiler: {
128
+ enabled: true, // 개발 모드에서의 영향을 제한하기 위해 'build-only'로 설정 가능
129
+ outputDir: "i18n",
130
+ dictionaryKeyPrefix: "", // 접두사 comp- 없음
131
+ },
132
+ ai: {
133
+ provider: "openai",
134
+ model: "gpt-5-mini",
135
+ apiKey: process.env.OPEN_AI_API_KEY,
136
+ applicationContext: "이 앱은 지도 앱입니다", // 참고: 앱 설명을 사용자 정의할 수 있습니다.
137
+ },
138
+ };
139
+
140
+ export default config;
141
+ ```
142
+
143
+ > **참고**: 환경 변수에 `OPEN_AI_API_KEY`가 설정되어 있는지 확인하세요.
144
+
145
+ > 이 구성 파일을 통해 로컬라이즈된 URL, 미들웨어 리디렉션, 쿠키 이름, 콘텐츠 선언의 위치 및 확장자 설정, 콘솔의 Intlayer 로그 비활성화 등을 설정할 수 있습니다. 사용 가능한 매개변수의 전체 목록은 [구성 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)를 참조하세요.
146
+
147
+ ### 3단계: Vite 구성에 Intlayer 통합
148
+
149
+ 구성 파일에 intlayer 플러그인을 추가합니다.
150
+
151
+ ```typescript fileName="vite.config.ts"
152
+ import { defineConfig } from "vite";
153
+ import react from "@vitejs/plugin-react-swc";
154
+ import { intlayer, intlayerCompiler } from "vite-intlayer";
155
+
156
+ // https://vitejs.dev/config/
157
+ export default defineConfig({
158
+ plugins: [react(), intlayer(), intlayerCompiler()],
159
+ });
160
+ ```
161
+
162
+ > `intlayer()` Vite 플러그인은 Intlayer를 Vite와 통합하는 데 사용됩니다. 콘텐츠 선언 파일의 빌드를 보장하고 개발 모드에서 이를 모니터링합니다. Vite 애플리케이션 내에서 Intlayer 환경 변수를 정의합니다. 또한 성능 최적화를 위한 별칭(alias)을 제공합니다.
163
+
164
+ > `intlayerCompiler()` Vite 플러그인은 컴포넌트에서 콘텐츠를 추출하고 `.content` 파일을 작성하는 데 사용됩니다.
165
+
166
+ ### 4단계: 코드 컴파일
167
+
168
+ 기본 로케일로 하드코딩된 문자열을 사용하여 컴포넌트를 작성하기만 하면 됩니다. 나머지는 컴파일러가 처리합니다.
169
+
170
+ 페이지의 예시는 다음과 같습니다:
171
+
172
+ <Tabs>
173
+ <Tab value="코드">
174
+
175
+ ```tsx fileName="src/App.tsx"
176
+ import { useState, type FC } from "react";
177
+ import reactLogo from "./assets/react.svg";
178
+ import viteLogo from "/vite.svg";
179
+ import "./App.css";
180
+ import { IntlayerProvider } from "react-intlayer";
181
+
182
+ const AppContent: FC = () => {
183
+ const [count, setCount] = useState(0);
184
+
185
+ return (
186
+ <>
187
+ <div>
188
+ <a href="https://vitejs.dev" target="_blank">
189
+ <img src={viteLogo} className="logo" alt="Vite logo" />
190
+ </a>
191
+ <a href="https://react.dev" target="_blank">
192
+ <img src={reactLogo} className="logo react" alt="React logo" />
193
+ </a>
194
+ </div>
195
+ <h1>Vite + React</h1>
196
+ <div className="card">
197
+ <button onClick={() => setCount((count) => count + 1)}>
198
+ count is {count}
199
+ </button>
200
+ <p>
201
+ Edit <code>src/App.tsx</code> and save to test HMR
202
+ </p>
203
+ </div>
204
+ <p className="read-the-docs">
205
+ Click on the Vite and React logos to learn more
206
+ </p>
207
+ </>
208
+ );
209
+ };
210
+
211
+ const App: FC = () => (
212
+ <IntlayerProvider>
213
+ <AppContent />
214
+ </IntlayerProvider>
215
+ );
216
+
217
+ export default App;
218
+ ```
219
+
220
+ </Tab>
221
+ <Tab value="출력">
222
+
223
+ ```ts fileName="i18n/app-content.content.json"
224
+ {
225
+ key: "app-content",
226
+ content: {
227
+ nodeType: "translation",
228
+ translation: {
229
+ en: {
230
+ viteLogo: "Vite logo",
231
+ reactLogo: "React logo",
232
+ title: "Vite + React",
233
+ countButton: "count is",
234
+ editMessage: "Edit",
235
+ hmrMessage: "and save to test HMR",
236
+ readTheDocs: "Click on the Vite and React logos to learn more",
237
+ },
238
+ ko: {
239
+ viteLogo: "Vite 로고",
240
+ reactLogo: "React 로고",
241
+ title: "Vite + React",
242
+ countButton: "현재 카운트:",
243
+ editMessage: "수정",
244
+ hmrMessage: "후 저장하여 HMR을 테스트하세요",
245
+ readTheDocs: "자세한 내용은 Vite 및 React 로고를 클릭하세요",
246
+ },
247
+ }
248
+ }
249
+ }
250
+ ```
251
+
252
+ ```tsx fileName="src/App.tsx"
253
+ import { useState, type FC } from "react";
254
+ import reactLogo from "./assets/react.svg";
255
+ import viteLogo from "/vite.svg";
256
+ import "./App.css";
257
+ import { IntlayerProvider, useIntlayer } from "react-intlayer";
258
+
259
+ const AppContent: FC = () => {
260
+ const [count, setCount] = useState(0);
261
+ const content = useIntlayer("app-content");
262
+
263
+ return (
264
+ <>
265
+ <div>
266
+ <a href="https://vitejs.dev" target="_blank">
267
+ <img src={viteLogo} className="logo" alt={content.viteLogo.value} />
268
+ </a>
269
+ <a href="https://react.dev" target="_blank">
270
+ <img
271
+ src={reactLogo}
272
+ className="logo react"
273
+ alt={content.reactLogo.value}
274
+ />
275
+ </a>
276
+ </div>
277
+ <h1>{content.title}</h1>
278
+ <div className="card">
279
+ <button onClick={() => setCount((count) => count + 1)}>
280
+ {content.countButton} {count}
281
+ </button>
282
+ <p>
283
+ {content.editMessage} <code>src/App.tsx</code> {content.hmrMessage}
284
+ </p>
285
+ </div>
286
+ <p className="read-the-docs">{content.readTheDocs}</p>
287
+ </>
288
+ );
289
+ };
290
+
291
+ const App: FC = () => (
292
+ <IntlayerProvider>
293
+ <AppContent />
294
+ </IntlayerProvider>
295
+ );
296
+
297
+ export default App;
298
+ ```
299
+
300
+ </Tab>
301
+ </Tabs>
302
+
303
+ - **`IntlayerProvider`**는 중첩된 컴포넌트에 로케일을 제공하는 데 사용됩니다.
304
+
305
+ ### (선택 사항) 6단계: 콘텐츠 언어 변경
306
+
307
+ 콘텐츠 언어를 변경하려면 `useLocale` 훅에서 제공하는 `setLocale` 함수를 사용할 수 있습니다. 이 함수를 사용하면 애플리케이션의 로케일을 설정하고 그에 따라 콘텐츠를 업데이트할 수 있습니다.
308
+
309
+ ```tsx fileName="src/components/LocaleSwitcher.tsx"
310
+ import type { FC } from "react";
311
+ import { Locales } from "intlayer";
312
+ import { useLocale } from "react-intlayer";
313
+
314
+ const LocaleSwitcher: FC = () => {
315
+ const { setLocale } = useLocale();
316
+
317
+ return (
318
+ <button onClick={() => setLocale(Locales.KOREAN)}>
319
+ 언어를 한국어로 변경
320
+ </button>
321
+ );
322
+ };
323
+ ```
324
+
325
+ > `useLocale` 훅에 대해 자세히 알아보려면 [문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/packages/react-intlayer/useLocale.md)를 참조하세요.
326
+
327
+ ### (선택 사항) 7단계: 누락된 번역 채우기
328
+
329
+ Intlayer는 누락된 번역을 채울 수 있도록 돕는 CLI 도구를 제공합니다. `intlayer` 명령어를 사용하여 코드에서 누락된 번역을 테스트하고 채울 수 있습니다.
330
+
331
+ ```bash
332
+ npx intlayer test # 누락된 번역이 있는지 테스트
333
+ ```
334
+
335
+ ```bash
336
+ npx intlayer fill # 누락된 번역 채우기
337
+ ```
338
+
339
+ > 자세한 내용은 [CLI 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/cli/ci.md)를 참조하세요.
340
+
341
+ ### Git 구성
342
+
343
+ Intlayer에서 생성된 파일은 무시하는 것이 좋습니다. 이렇게 하면 Git 저장소에 커밋되는 것을 방지할 수 있습니다.
344
+
345
+ 이를 위해 `.gitignore` 파일에 다음 지침을 추가할 수 있습니다:
346
+
347
+ ```plaintext fileName=".gitignore"
348
+ # Intlayer에서 생성된 파일 무시
349
+ .intlayer
350
+ ```
351
+
352
+ ### VS Code 확장 프로그램
353
+
354
+ Intlayer 개발 경험을 향상시키기 위해 공식 **Intlayer VS Code 확장 프로그램**을 설치할 수 있습니다.
355
+
356
+ [VS Code Marketplace에서 설치](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
357
+
358
+ 이 확장 프로그램은 다음을 제공합니다:
359
+
360
+ - 번역 키에 대한 **자동 완성**.
361
+ - 누락된 번역에 대한 **실시간 오류 감지**.
362
+ - 번역된 콘텐츠의 **인라인 미리보기**.
363
+ - 번역을 쉽게 생성하고 업데이트할 수 있는 **빠른 작업**.
364
+
365
+ 확장 프로그램 사용 방법에 대한 자세한 내용은 [Intlayer VS Code 확장 프로그램 문서](https://intlayer.org/doc/vs-code-extension)를 참조하세요.
366
+
367
+ ### 더 알아보기
368
+
369
+ 더 나아가 [비주얼 에디터](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_visual_editor.md)를 구현하거나 [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_CMS.md)를 사용하여 콘텐츠를 외부화할 수 있습니다.