@intlayer/docs 7.1.8 → 7.2.0

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 (44) hide show
  1. package/README.md +1 -0
  2. package/dist/cjs/generated/docs.entry.cjs +19 -0
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +19 -0
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +1 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/intlayer_with_svelte_kit.md +730 -0
  9. package/docs/ar/intlayer_with_vite+svelte.md +288 -104
  10. package/docs/de/intlayer_with_svelte_kit.md +730 -0
  11. package/docs/de/intlayer_with_vite+svelte.md +302 -101
  12. package/docs/en/intlayer_with_svelte_kit.md +560 -0
  13. package/docs/en/intlayer_with_vite+svelte.md +153 -15
  14. package/docs/en/introduction.md +2 -0
  15. package/docs/en-GB/intlayer_with_svelte_kit.md +730 -0
  16. package/docs/en-GB/intlayer_with_vite+svelte.md +262 -84
  17. package/docs/es/intlayer_with_svelte_kit.md +730 -0
  18. package/docs/es/intlayer_with_vite+svelte.md +300 -107
  19. package/docs/fr/intlayer_with_svelte_kit.md +762 -0
  20. package/docs/fr/intlayer_with_vite+svelte.md +297 -101
  21. package/docs/hi/intlayer_with_svelte_kit.md +730 -0
  22. package/docs/hi/intlayer_with_vite+svelte.md +298 -108
  23. package/docs/id/intlayer_with_svelte_kit.md +730 -0
  24. package/docs/id/intlayer_with_vite+svelte.md +277 -99
  25. package/docs/it/intlayer_with_svelte_kit.md +762 -0
  26. package/docs/it/intlayer_with_vite+svelte.md +275 -99
  27. package/docs/ja/intlayer_with_svelte_kit.md +730 -0
  28. package/docs/ja/intlayer_with_vite+svelte.md +295 -110
  29. package/docs/ko/intlayer_with_svelte_kit.md +730 -0
  30. package/docs/ko/intlayer_with_vite+svelte.md +286 -199
  31. package/docs/pl/intlayer_with_svelte_kit.md +732 -0
  32. package/docs/pl/intlayer_with_vite+svelte.md +273 -101
  33. package/docs/pt/intlayer_with_svelte_kit.md +764 -0
  34. package/docs/pt/intlayer_with_vite+svelte.md +290 -96
  35. package/docs/ru/intlayer_with_svelte_kit.md +730 -0
  36. package/docs/ru/intlayer_with_vite+svelte.md +275 -99
  37. package/docs/tr/intlayer_with_svelte_kit.md +730 -0
  38. package/docs/tr/intlayer_with_vite+svelte.md +297 -119
  39. package/docs/vi/intlayer_with_svelte_kit.md +730 -0
  40. package/docs/vi/intlayer_with_vite+svelte.md +275 -102
  41. package/docs/zh/intlayer_with_svelte_kit.md +730 -0
  42. package/docs/zh/intlayer_with_vite+svelte.md +309 -107
  43. package/package.json +6 -6
  44. package/src/generated/docs.entry.ts +19 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  createdAt: 2025-04-18
3
- updatedAt: 2025-06-29
4
- title: Vite and Svelte 앱 번역하는 방법 – i18n 가이드 2025
3
+ updatedAt: 2025-11-19
4
+ title: Vite Svelte 앱 번역 방법 – 2025 i18n 가이드
5
5
  description: Vite 및 Svelte 웹사이트를 다국어로 만드는 방법을 알아보세요. 국제화(i18n) 및 번역을 위한 문서를 따라가세요.
6
6
  keywords:
7
7
  - 국제화
@@ -9,23 +9,26 @@ keywords:
9
9
  - Intlayer
10
10
  - Vite
11
11
  - Svelte
12
- - 자바스크립트
12
+ - JavaScript
13
13
  slugs:
14
14
  - doc
15
15
  - environment
16
16
  - vite-and-svelte
17
- # applicationTemplate: https://github.com/aymericzip/intlayer-vite-svelte-template
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-vite-svelte-template
18
18
  history:
19
+ - version: 5.5.11
20
+ date: 2025-11-19
21
+ changes: 문서 업데이트
19
22
  - version: 5.5.10
20
23
  date: 2025-06-29
21
- changes: 이력 초기화
24
+ changes: 히스토리 초기화
22
25
  ---
23
26
 
24
- # Intlayer Vite and Svelte 번역하기 | 국제화(i18n)
27
+ # Intlayer 사용하여 Vite Svelte 웹사이트 번역하기 | 국제화(i18n)
25
28
 
26
- > 이 패키지는 개발 중입니다. 자세한 내용은 [이슈](https://github.com/aymericzip/intlayer/issues/114)를 참조하세요. 이슈에 좋아요를 눌러 Svelte용 Intlayer에 대한 관심을 표현해 주세요.
29
+ ## 목차
27
30
 
28
- <!-- GitHub에서 [애플리케이션 템플릿](https://github.com/aymericzip/intlayer-solid-template)을 확인하세요. -->
31
+ <TOC/>
29
32
 
30
33
  ## Intlayer란 무엇인가요?
31
34
 
@@ -34,13 +37,23 @@ history:
34
37
  Intlayer를 사용하면 다음을 할 수 있습니다:
35
38
 
36
39
  - **컴포넌트 수준에서 선언적 사전을 사용하여 번역을 쉽게 관리**할 수 있습니다.
37
- - **메타데이터, 라우트 콘텐츠를 동적으로 현지화**할 수 있습니다.
40
+ - **메타데이터, 라우트, 콘텐츠를 동적으로 현지화**할 수 있습니다.
38
41
  - **자동 생성된 타입으로 TypeScript 지원을 보장**하여 자동 완성 및 오류 감지를 향상시킵니다.
39
- - **동적 로케일 감지 및 전환과 같은 고급 기능을 활용**할 수 있습니다.
42
+ - **동적 로케일 감지 및 전환과 같은 고급 기능**을 활용할 수 있습니다.
40
43
 
41
44
  ---
42
45
 
43
- ## Vite Svelte 애플리케이션에서 Intlayer 설정 단계별 가이드
46
+ ## Vite Svelte 애플리케이션에서 Intlayer 설정 단계별 가이드
47
+
48
+ <iframe
49
+ src="https://stackblitz.com/github/aymericzip/intlayer-vite-react-template?embed=1&ctl=1&file=intlayer.config.ts"
50
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
51
+ title="Demo CodeSandbox - Intlayer를 사용하여 애플리케이션을 국제화하는 방법"
52
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
53
+ loading="lazy"
54
+ />
55
+
56
+ GitHub에서 [애플리케이션 템플릿](https://github.com/aymericzip/intlayer-vite-svelte-template)을 확인하세요.
44
57
 
45
58
  ### 1단계: 의존성 설치
46
59
 
@@ -61,55 +74,26 @@ yarn add intlayer svelte-intlayer
61
74
  yarn add vite-intlayer --save-dev
62
75
  ```
63
76
 
77
+ ```bash packageManager="bun"
78
+ bun add intlayer svelte-intlayer
79
+ bun add vite-intlayer --save-dev
80
+ ```
81
+
64
82
  - **intlayer**
65
83
 
66
- 핵심 패키지로, 구성 관리, 번역, [콘텐츠 선언](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/dictionary/get_started.md), 트랜스파일링 및 [CLI 명령어](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_cli.md)를 위한 국제화 도구를 제공합니다.
84
+ 구성 관리, 번역, [콘텐츠 선언](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/intlayer_cli.md)를 위한 국제화 도구를 제공하는 핵심 패키지입니다.
67
85
 
68
86
  - **svelte-intlayer**
69
- Intlayer를 Svelte 애플리케이션과 통합하는 패키지입니다. Svelte 국제화를 위한 컨텍스트 제공자와 훅을 제공합니다.
87
+ Intlayer를 Svelte 애플리케이션과 통합하는 패키지입니다. Svelte 국제화를 위한 컨텍스트 프로바이더와 훅을 제공합니다.
70
88
 
71
89
  - **vite-intlayer**
72
90
  Intlayer를 [Vite 번들러](https://vite.dev/guide/why.html#why-bundle-for-production)와 통합하기 위한 Vite 플러그인과, 사용자의 선호 로케일 감지, 쿠키 관리, URL 리디렉션 처리를 위한 미들웨어를 포함합니다.
73
91
 
74
92
  ### 2단계: 프로젝트 구성
75
93
 
76
- 애플리케이션의 언어를 구성하기 위해 설정 파일을 만드세요:
77
-
78
- ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
79
- import { Locales, type IntlayerConfig } from "intlayer";
80
-
81
- const config: IntlayerConfig = {
82
- internationalization: {
83
- locales: [
84
- Locales.ENGLISH,
85
- Locales.FRENCH,
86
- Locales.SPANISH,
87
- // 다른 로케일들
88
- ],
89
- defaultLocale: Locales.ENGLISH,
90
- },
91
- };
92
-
93
- export default config;
94
- ```
95
-
96
- ````javascript fileName="intlayer.config.mjs" codeFormat="esm"
97
- import { Locales } from "intlayer";
98
-
99
- /** @type {import('intlayer').IntlayerConfig} */
100
- const config = {
101
- internationalization: {
102
- locales: [
103
- Locales.ENGLISH,
104
- Locales.FRENCH,
105
- Locales.SPANISH,
106
- // 다른 로케일들
107
- ],
108
- ### 2단계: 프로젝트 구성
109
-
110
- 애플리케이션의 언어를 구성하기 위해 설정 파일을 만드세요:
94
+ 애플리케이션의 언어를 구성하기 위한 설정 파일을 생성합니다:
111
95
 
112
- ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
96
+ ```typescript fileName="intlayer.config.ts"
113
97
  import { Locales, type IntlayerConfig } from "intlayer";
114
98
 
115
99
  const config: IntlayerConfig = {
@@ -125,97 +109,15 @@ const config: IntlayerConfig = {
125
109
  };
126
110
 
127
111
  export default config;
128
- ````
129
-
130
- ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
131
- import { Locales } from "intlayer";
132
-
133
- /** @type {import('intlayer').IntlayerConfig} */
134
- const config = {
135
- internationalization: {
136
- locales: [
137
- Locales.ENGLISH,
138
- Locales.FRENCH,
139
- Locales.SPANISH,
140
- // 다른 로케일들
141
- ],
142
- defaultLocale: Locales.ENGLISH,
143
- },
144
- };
145
-
146
- export default config;
147
- ```
148
-
149
- ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
150
- const { Locales } = require("intlayer");
151
-
152
- /** @type {import('intlayer').IntlayerConfig} */
153
- const config = {
154
- internationalization: {
155
- locales: [
156
- Locales.ENGLISH,
157
- Locales.FRENCH,
158
- Locales.SPANISH,
159
- // 다른 로케일들
160
- ],
161
- defaultLocale: Locales.ENGLISH,
162
- },
163
- };
164
-
165
- module.exports = config;
166
- ```
167
-
168
- > 이 구성 파일을 통해 로컬라이즈된 URL, 미들웨어 리디렉션, 쿠키 이름, 콘텐츠 선언의 위치 및 확장자, 콘솔에서 Intlayer 로그 비활성화 등 다양한 설정을 할 수 있습니다. 사용 가능한 모든 매개변수 목록은 [구성 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)를 참조하세요.
169
-
170
- ### 3단계: Vite 구성에 Intlayer 통합
171
-
172
- intlayer 플러그인을 구성에 추가하세요.
173
-
174
- ```typescript fileName="vite.config.ts" codeFormat="typescript"
175
- import { defineConfig } from "vite";
176
- import { svelte } from "@sveltejs/vite-plugin-svelte";
177
- import { intlayer } from "vite-intlayer";
178
-
179
- // https://vitejs.dev/config/
180
- export default defineConfig({
181
- plugins: [svelte(), intlayer()],
182
- });
183
- ```
184
-
185
- > 이 구성 파일을 통해 지역화된 URL, 미들웨어 리디렉션, 쿠키 이름, 콘텐츠 선언의 위치 및 확장자 설정, 콘솔에서 Intlayer 로그 비활성화 등 다양한 설정을 할 수 있습니다. 사용 가능한 모든 매개변수 목록은 [구성 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)를 참조하세요.
186
-
187
- ### 3단계: Vite 구성에 Intlayer 통합하기
188
-
189
- intlayer 플러그인을 구성에 추가하세요.
190
-
191
- ```typescript fileName="vite.config.ts" codeFormat="typescript"
192
- import { defineConfig } from "vite";
193
- import { svelte } from "@sveltejs/vite-plugin-svelte";
194
- import { intlayer } from "vite-intlayer";
195
-
196
- // https://vitejs.dev/config/
197
- export default defineConfig({
198
- plugins: [svelte(), intlayer()],
199
- });
200
112
  ```
201
113
 
202
- ````> 이 구성 파일을 통해 지역화된 URL, 미들웨어 리디렉션, 쿠키 이름, 콘텐츠 선언의 위치 및 확장자, 콘솔에서 Intlayer 로그 비활성화 등을 설정할 수 있습니다. 사용 가능한 모든 매개변수 목록은 [구성 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)를 참조하세요.
114
+ > 이 구성 파일을 통해 로컬라이즈된 URL, 미들웨어 리디렉션, 쿠키 이름, 콘텐츠 선언의 위치 및 확장자 설정, 콘솔에서 Intlayer 로그 비활성화 다양한 설정을 할 수 있습니다. 사용 가능한 모든 매개변수 목록은 [구성 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)를 참조하세요.
203
115
 
204
- ### 3단계: Vite 구성에 Intlayer 통합하기
116
+ ### Step 3: Vite 구성에 Intlayer 통합하기
205
117
 
206
118
  intlayer 플러그인을 구성에 추가하세요.
207
119
 
208
- ```typescript fileName="vite.config.ts" codeFormat="typescript"
209
- import { defineConfig } from "vite";
210
- import { svelte } from "@sveltejs/vite-plugin-svelte";
211
- import { intlayer } from "vite-intlayer";
212
-
213
- // https://vitejs.dev/config/
214
- export default defineConfig({
215
- plugins: [svelte(), intlayer()],});
216
- ````
217
-
218
- ```javascript fileName="vite.config.mjs" codeFormat="esm"
120
+ ```typescript fileName="vite.config.ts"
219
121
  import { defineConfig } from "vite";
220
122
  import { svelte } from "@sveltejs/vite-plugin-svelte";
221
123
  import { intlayer } from "vite-intlayer";
@@ -226,47 +128,7 @@ export default defineConfig({
226
128
  });
227
129
  ```
228
130
 
229
- ```javascript fileName="vite.config.cjs" codeFormat="commonjs"
230
- const { defineConfig } = require("vite");
231
- const react = require("@vitejs/plugin-react-swc");
232
- const { intlayer } = require("vite-intlayer");
233
-
234
- // https://vitejs.dev/config/
235
- module.exports = defineConfig({
236
- plugins: [react(), intlayer()],
237
- });
238
- ```
239
-
240
- > `intlayer()` Vite 플러그인은 Intlayer를 Vite와 통합하는 데 사용됩니다. 이 플러그인은 콘텐츠 선언 파일을 빌드하고 개발 모드에서 이를 모니터링합니다. 또한 Vite 애플리케이션 내에서 Intlayer 환경 변수를 정의하며, 성능 최적화를 위한 별칭도 제공합니다.
241
-
242
- ### 4단계: 콘텐츠 선언하기
243
-
244
- 번역을 저장할 콘텐츠 선언을 생성하고 관리하세요:
245
-
246
- ```tsx fileName="src/app.content.tsx" contentDeclarationFormat="typescript"
247
- import { t, type Dictionary } from "intlayer";
248
-
249
- const appContent = {
250
- key: "app",
251
- content: {
252
- title: t({
253
- en: "Hello World",
254
- fr: "Bonjour le monde",
255
- es: "Hola mundo",
256
- }),
257
- },
258
- } satisfies Dictionary;
259
-
260
- export default appContent;
261
- ```
262
-
263
- ```javascript fileName="src/app.content.mjs" contentDeclarationFormat="esm"
264
- import { t } from "intlayer";
265
-
266
- /** @type {import('intlayer').Dictionary} */
267
- ```
268
-
269
- > `intlayer()` Vite 플러그인은 Intlayer를 Vite와 통합하는 데 사용됩니다. 이 플러그인은 콘텐츠 선언 파일의 빌드를 보장하고 개발 모드에서 이를 모니터링합니다. 또한 Vite 애플리케이션 내에서 Intlayer 환경 변수를 정의하며, 성능 최적화를 위해 별칭(alias)을 제공합니다.
131
+ > `intlayer()` Vite 플러그인은 Intlayer를 Vite와 통합하는 데 사용됩니다. 이 플러그인은 콘텐츠 선언 파일의 빌드를 보장하고 개발 모드에서 이를 모니터링합니다. 또한 Vite 애플리케이션 내에서 Intlayer 환경 변수를 정의하며, 성능 최적화를 위한 별칭(alias)도 제공합니다.
270
132
 
271
133
  ### 4단계: 콘텐츠 선언하기
272
134
 
@@ -311,7 +173,6 @@ export default appContent;
311
173
  const { t } = require("intlayer");
312
174
 
313
175
  /** @type {import('intlayer').Dictionary} */
314
- // Intlayer 사전 타입 지정
315
176
  const appContent = {
316
177
  key: "app",
317
178
  content: {
@@ -343,64 +204,290 @@ module.exports = appContent;
343
204
  }
344
205
  ```
345
206
 
346
- > 콘텐츠 선언은 애플리케이션 내 어디서든 정의할 수 있으며, `contentDir` 디렉토리(기본값은 `./src`)에 포함되기만 하면 됩니다. 그리고 콘텐츠 선언 파일 확장자(기본값은 `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`)와 일치해야 합니다.
207
+ > 콘텐츠 선언은 애플리케이션 내 어디서든 `contentDir` 디렉토리(기본값: `./src`)에 포함되기만 하면 정의할 수 있습니다. 그리고 콘텐츠 선언 파일 확장자(기본값: `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`)와 일치해야 합니다.
347
208
 
348
- > 자세한 내용은 [콘텐츠 선언 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/dictionary/get_started.md)를 참조하세요.
209
+ > 자세한 내용은 [콘텐츠 선언 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/dictionary/content_file.md)를 참조하세요.
349
210
 
350
211
  ### 5단계: 코드에서 Intlayer 사용하기
351
212
 
352
- [완료 예정]
213
+ ```svelte fileName="src/App.svelte"
214
+ <script>
215
+ import { useIntlayer } from "svelte-intlayer";
216
+
217
+ const content = useIntlayer("app");
218
+ </script>
219
+
220
+ <div>
221
+
222
+
223
+ <!-- 간단한 콘텐츠로 렌더링 -->
224
+ <h1>{$content.title}</h1>
225
+ <!-- 에디터를 사용하여 편집 가능한 콘텐츠로 렌더링 -->
226
+ <h1><svelte:component this={$content.title} /></h1>
227
+ <!-- 문자열로 콘텐츠 렌더링 -->
228
+ <div aria-label={$content.title.value}></div>
229
+ ```
230
+
231
+ ### (선택 사항) 6단계: 콘텐츠 언어 변경하기
353
232
 
354
- ### (선택 사항) 6단계: 콘텐츠의 언어 변경하기
233
+ ```svelte fileName="src/App.svelte"
234
+ <script lang="ts">
235
+ import { getLocaleName } from 'intlayer';
236
+ import { useLocale } from 'svelte-intlayer';
355
237
 
356
- [완료 예정]
238
+ // 로케일 정보와 setLocale 함수 가져오기
239
+ const { locale, availableLocales, setLocale } = useLocale();
240
+
241
+ // 로케일 변경 처리
242
+ const changeLocale = (event: Event) => {
243
+ const target = event.target as HTMLSelectElement;
244
+ const newLocale = target.value;
245
+ setLocale(newLocale);
246
+ };
247
+ </script>
248
+
249
+ <div>
250
+ <select value={$locale} on:change={changeLocale}>
251
+ {#each availableLocales ?? [] as loc}
252
+ <option value={loc}>
253
+ {getLocaleName(loc)}
254
+ </option>
255
+ {/each}
256
+ </select>
257
+ </div>
258
+ ```
259
+
260
+ ### (선택 사항) 7단계: 마크다운 렌더링
261
+
262
+ Intlayer는 Svelte 애플리케이션에서 마크다운 콘텐츠를 직접 렌더링하는 것을 지원합니다. 기본적으로 마크다운은 일반 텍스트로 처리됩니다. 마크다운을 풍부한 HTML로 변환하려면 `@humanspeak/svelte-markdown` 또는 다른 마크다운 파서를 통합할 수 있습니다.
263
+
264
+ > `intlayer` 패키지를 사용하여 마크다운 콘텐츠를 선언하는 방법은 [마크다운 문서](https://github.com/aymericzip/intlayer/tree/main/docs/docs/ko/dictionary/markdown.md)를 참조하세요.
265
+
266
+ ```svelte fileName="src/App.svelte"
267
+ <script>
268
+ import { setIntlayerMarkdown } from "svelte-intlayer";
269
+
270
+ setIntlayerMarkdown((markdown) =>
271
+ // 마크다운 콘텐츠를 문자열로 렌더링합니다
272
+ return markdown;
273
+ );
274
+ </script>
275
+
276
+ <h1>{$content.markdownContent}</h1>
277
+ ```
278
+
279
+ > `content.markdownContent.metadata.xxx` 속성을 사용하여 마크다운 프론트매터 데이터에도 접근할 수 있습니다.
280
+
281
+ ### (선택 사항) 8단계: intlayer 에디터 / CMS 설정하기
282
+
283
+ intlayer 에디터를 설정하려면 [intlayer 에디터 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_visual_editor.md)를 따라야 합니다.
284
+
285
+ intlayer CMS를 설정하려면 [intlayer CMS 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_CMS.md)를 따라야 합니다.
286
+
287
+ 병행하여, Svelte 애플리케이션에서는 레이아웃이나 애플리케이션의 루트에 다음 라인을 추가해야 합니다:
288
+
289
+ ```svelte fileName="src/layout.svelte"
290
+ import { useIntlayerEditor } from "svelte-intlayer";
291
+
292
+ useIntlayerEditor();
293
+ ```
357
294
 
358
295
  ### (선택 사항) 7단계: 애플리케이션에 지역화된 라우팅 추가하기
359
296
 
360
- [완료 예정]
297
+ Svelte 애플리케이션에서 지역화된 라우팅을 처리하려면, `svelte-spa-router`와 Intlayer의 `localeFlatMap`을 함께 사용하여 각 로케일에 대한 라우트를 생성할 수 있습니다.
298
+
299
+ 먼저, `svelte-spa-router`를 설치하세요:
300
+
301
+ ```bash packageManager="npm"
302
+ npm install svelte-spa-router
303
+ ```
304
+
305
+ ```bash packageManager="pnpm"
306
+ pnpm add svelte-spa-router
307
+ ```
308
+
309
+ ```bash packageManager="yarn"
310
+ yarn add svelte-spa-router
311
+ ```
312
+
313
+ ```bash packageManager="bun"
314
+ bun add svelte-spa-router
315
+ ```
316
+
317
+ 그런 다음, 라우트를 정의하기 위해 `Router.svelte` 파일을 생성하세요:
318
+
319
+ ```svelte fileName="src/Router.svelte"
320
+ <script lang="ts">
321
+ import { localeFlatMap } from "intlayer";
322
+ import Router from "svelte-spa-router";
323
+ import { wrap } from "svelte-spa-router/wrap";
324
+ import App from "./App.svelte";
325
+
326
+ const routes = Object.fromEntries(
327
+ localeFlatMap(({locale, urlPrefix}) => [
328
+ [
329
+ urlPrefix || '/',
330
+ wrap({
331
+ component: App as any,
332
+ props: {
333
+ locale,
334
+ },
335
+ }),
336
+ ],
337
+ ])
338
+ );
339
+ </script>
340
+
341
+ <Router {routes} />
342
+ ```
343
+
344
+ `main.ts` 파일을 업데이트하여 `App` 대신 `Router` 컴포넌트를 마운트하세요:
345
+
346
+ ```typescript fileName="src/main.ts"
347
+ import { mount } from "svelte";
348
+ import Router from "./Router.svelte";
349
+
350
+ const app = mount(Router, {
351
+ typescript fileName="src/main.ts"
352
+ target: document.getElementById("app")!,
353
+ });
354
+
355
+ export default app;
356
+ ```
357
+
358
+ 마지막으로, `App.svelte`를 업데이트하여 `locale` prop을 받고 `useIntlayer`와 함께 사용하세요:
359
+
360
+ ```svelte fileName="src/App.svelte"
361
+ <script lang="ts">
362
+ import type { Locale } from 'intlayer';
363
+ import { useIntlayer } from 'svelte-intlayer';
364
+ import Counter from './lib/Counter.svelte';
365
+ import LocaleSwitcher from './lib/LocaleSwitcher.svelte';
366
+
367
+ export let locale: Locale;
368
+
369
+ $: content = useIntlayer('app', locale);
370
+ </script>
371
+
372
+ <main>
373
+ <div class="locale-switcher-container">
374
+ <LocaleSwitcher currentLocale={locale} />
375
+ </div>
376
+
377
+ <!-- ... 앱의 나머지 부분 ... -->
378
+ </main>
379
+ ```
380
+
381
+ #### 서버 사이드 라우팅 구성 (선택 사항)
382
+
383
+ 병행하여, `intlayerProxy`를 사용하여 애플리케이션에 서버 사이드 라우팅을 추가할 수도 있습니다. 이 플러그인은 URL을 기반으로 현재 로케일을 자동으로 감지하고 적절한 로케일 쿠키를 설정합니다. 로케일이 지정되지 않은 경우, 플러그인은 사용자의 브라우저 언어 설정을 기반으로 가장 적합한 로케일을 결정합니다. 로케일이 감지되지 않으면 기본 로케일로 리디렉션합니다.
384
+
385
+ > `intlayerProxy`를 프로덕션에서 사용하려면 `vite-intlayer` 패키지를 `devDependencies`에서 `dependencies`로 변경해야 합니다.
386
+
387
+ ```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
388
+ import { defineConfig } from "vite";
389
+ import { svelte } from "@sveltejs/vite-plugin-svelte";
390
+ import { intlayer, intlayerProxy } from "vite-intlayer";
391
+
392
+ typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
393
+ import { defineConfig } from "vite";
394
+ import { svelte } from "@sveltejs/vite-plugin-svelte";
395
+ import { intlayer, intlayerProxy } from "vite-intlayer";
361
396
 
362
- ### (선택 사항) 8단계: 로케일 변경 시 URL 변경하기
397
+ // https://vitejs.dev/config/
398
+ export default defineConfig({
399
+ plugins: [svelte(), intlayer(), intlayerProxy()],
400
+ });
401
+ ```
363
402
 
364
- [완료 예정]
403
+ ```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
404
+ import { defineConfig } from "vite";
405
+ import { svelte } from "@sveltejs/vite-plugin-svelte";
406
+ import { intlayer, intlayerProxy } from "vite-intlayer";
365
407
 
366
- ### (선택 사항) 9단계: HTML 언어 및 방향 속성 전환하기
408
+ // https://vitejs.dev/config/
409
+ export default defineConfig({
410
+ plugins: [svelte(), intlayer(), intlayerProxy()],
411
+ });
412
+ ```
367
413
 
368
- [완료 예정]
414
+ ```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
415
+ const { defineConfig } = require("vite");
416
+ const { svelte } = require("@sveltejs/vite-plugin-svelte");
417
+ const { intlayer, intlayerProxy } = require("vite-intlayer");
369
418
 
370
- ### (선택 사항) 10단계: 지역화된 링크 컴포넌트 만들기
419
+ // https://vitejs.dev/config/
420
+ module.exports = defineConfig({
421
+ plugins: [svelte(), intlayer(), intlayerProxy()],
422
+ });
423
+ plugins: [svelte(), intlayer(), intlayerProxy()],
424
+ });
425
+ ```
426
+
427
+ ### (선택 사항) 8단계: 로케일이 변경될 때 URL 변경하기
428
+
429
+ 사용자가 언어를 전환하고 URL을 그에 맞게 업데이트할 수 있도록 `LocaleSwitcher` 컴포넌트를 만들 수 있습니다. 이 컴포넌트는 `intlayer`의 `getLocalizedUrl`과 `svelte-spa-router`의 `push`를 사용합니다.
430
+
431
+ ```svelte fileName="src/lib/LocaleSwitcher.svelte"
432
+ <script lang="ts">
433
+ import { getLocaleName, getLocalizedUrl } from "intlayer";
434
+ import { useLocale } from "svelte-intlayer";
435
+ import { push } from "svelte-spa-router";
371
436
 
372
- [완료 예정]
437
+ export let currentLocale: string | undefined = undefined;
438
+
439
+ // 로케일 정보 가져오기
440
+ const { locale, availableLocales } = useLocale();
441
+
442
+ // 로케일 변경 처리
443
+ const changeLocale = (event: Event) => {
444
+ const target = event.target as HTMLSelectElement;
445
+ const newLocale = target.value;
446
+ const currentUrl = window.location.pathname;
447
+ const url = getLocalizedUrl( currentUrl, newLocale);
448
+ push(url);
449
+ };
450
+ </script>
451
+
452
+ <div class="locale-switcher">
453
+ <select value={currentLocale ?? $locale} onchange={changeLocale}>
454
+ {#each availableLocales ?? [] as loc}
455
+ <option value={loc}>
456
+ {getLocaleName(loc)}
457
+ </option>
458
+ {/each}
459
+ </select>
460
+ </div>
461
+ ```
373
462
 
374
463
  ### Git 구성
375
464
 
376
- Intlayer가 생성하는 파일은 무시하는 것이 권장됩니다. 이렇게 하면 Git 저장소에 해당 파일들을 커밋하는 것을 방지할 수 있습니다.
465
+ Intlayer가 생성하는 파일은 Git 저장소에 커밋하지 않도록 무시하는 것이 좋습니다.
377
466
 
378
- 이를 위해, `.gitignore` 파일에 다음 지침을 추가할 수 있습니다:
467
+ 이를 위해 `.gitignore` 파일에 다음 지침을 추가할 수 있습니다:
379
468
 
380
469
  ```plaintext
381
- # Intlayer에서 생성된 파일 무시
470
+ # Intlayer 생성하는 파일 무시
382
471
  .intlayer
383
472
  ```
384
473
 
385
- ### VS Code 확장 기능
474
+ ### VS Code 확장 프로그램
386
475
 
387
- Intlayer 함께 개발 경험을 향상시키기 위해 공식 **Intlayer VS Code 확장 기능**을 설치할 수 있습니다.
476
+ Intlayer 개발 경험을 향상시키기 위해 공식 **Intlayer VS Code 확장 프로그램**을 설치할 수 있습니다.
388
477
 
389
478
  [VS Code 마켓플레이스에서 설치하기](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
390
479
 
391
- 이 확장 기능은 다음을 제공합니다:
480
+ 이 확장 프로그램은 다음을 제공합니다:
392
481
 
393
- - 번역 키에 대한 **자동 완성**.
482
+ - 번역 키에 대한 **자동 완성** 기능.
394
483
  - 누락된 번역에 대한 **실시간 오류 감지**.
395
484
  - 번역된 콘텐츠의 **인라인 미리보기**.
396
485
  - 번역을 쉽게 생성하고 업데이트할 수 있는 **빠른 작업**.
397
486
 
398
- 확장 기능 사용 방법에 대한 자세한 내용은 [Intlayer VS Code 확장 기능 문서](https://intlayer.org/doc/vs-code-extension)를 참조하세요.
487
+ 확장 프로그램 사용 방법에 대한 자세한 내용은 [Intlayer VS Code 확장 프로그램 문서](https://intlayer.org/doc/vs-code-extension)를 참조하세요.
399
488
 
400
489
  ---
401
490
 
402
491
  ### 더 나아가기
403
492
 
404
- 나아가려면, [비주얼 에디터](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)를 사용하여 콘텐츠를 외부화할 수 있습니다.
405
-
406
- ---
493
+ 나아가려면 [비주얼 에디터](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)를 사용하여 콘텐츠를 외부화할 수 있습니다.