@intlayer/docs 8.3.0-canary.4 → 8.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.
- package/docs/ar/compiler.md +84 -49
- package/docs/ar/configuration.md +80 -37
- package/docs/ar/intlayer_with_nextjs_16.md +174 -1
- package/docs/ar/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ar/intlayer_with_react_router_v7.md +224 -1
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/ar/intlayer_with_svelte_kit.md +175 -2
- package/docs/ar/intlayer_with_tanstack.md +176 -1
- package/docs/ar/intlayer_with_vite+preact.md +174 -1
- package/docs/ar/intlayer_with_vite+react.md +174 -1
- package/docs/ar/intlayer_with_vite+solid.md +174 -1
- package/docs/ar/intlayer_with_vite+svelte.md +174 -1
- package/docs/ar/intlayer_with_vite+vue.md +174 -1
- package/docs/de/compiler.md +83 -48
- package/docs/de/configuration.md +434 -212
- package/docs/de/intlayer_with_nextjs_16.md +176 -1
- package/docs/de/intlayer_with_nextjs_compiler.md +106 -349
- package/docs/de/intlayer_with_react_router_v7.md +225 -2
- package/docs/de/intlayer_with_react_router_v7_fs_routes.md +221 -79
- package/docs/de/intlayer_with_svelte_kit.md +158 -2
- package/docs/de/intlayer_with_tanstack.md +159 -1
- package/docs/de/intlayer_with_vite+preact.md +157 -1
- package/docs/de/intlayer_with_vite+react.md +157 -1
- package/docs/de/intlayer_with_vite+solid.md +159 -3
- package/docs/de/intlayer_with_vite+svelte.md +157 -1
- package/docs/de/intlayer_with_vite+vue.md +157 -1
- package/docs/en/compiler.md +60 -33
- package/docs/en/configuration.md +80 -57
- package/docs/en/intlayer_with_nextjs_16.md +176 -0
- package/docs/en/intlayer_with_nextjs_compiler.md +179 -1
- package/docs/en/intlayer_with_react_router_v7.md +159 -0
- package/docs/en/intlayer_with_react_router_v7_fs_routes.md +159 -0
- package/docs/en/intlayer_with_svelte_kit.md +159 -0
- package/docs/en/intlayer_with_tanstack.md +160 -1
- package/docs/en/intlayer_with_vite+preact.md +159 -0
- package/docs/en/intlayer_with_vite+react.md +159 -0
- package/docs/en/intlayer_with_vite+solid.md +148 -27
- package/docs/en/intlayer_with_vite+svelte.md +159 -0
- package/docs/en/intlayer_with_vite+vue.md +142 -41
- package/docs/en-GB/compiler.md +66 -34
- package/docs/en-GB/configuration.md +78 -36
- package/docs/es/compiler.md +83 -48
- package/docs/es/configuration.md +429 -206
- package/docs/es/intlayer_with_adonisjs.md +1 -1
- package/docs/es/intlayer_with_express.md +1 -1
- package/docs/es/intlayer_with_fastify.md +1 -1
- package/docs/es/intlayer_with_hono.md +1 -1
- package/docs/es/intlayer_with_nestjs.md +1 -1
- package/docs/es/intlayer_with_nextjs_16.md +176 -3
- package/docs/es/intlayer_with_nextjs_compiler.md +175 -2
- package/docs/es/intlayer_with_nuxt.md +1 -1
- package/docs/es/intlayer_with_react_router_v7.md +227 -4
- package/docs/es/intlayer_with_react_router_v7_fs_routes.md +162 -4
- package/docs/es/intlayer_with_svelte_kit.md +158 -2
- package/docs/es/intlayer_with_tanstack.md +160 -2
- package/docs/es/intlayer_with_vite+preact.md +162 -6
- package/docs/es/intlayer_with_vite+react.md +160 -4
- package/docs/es/intlayer_with_vite+solid.md +163 -7
- package/docs/es/intlayer_with_vite+svelte.md +157 -1
- package/docs/es/intlayer_with_vite+vue.md +165 -9
- package/docs/fr/compiler.md +81 -46
- package/docs/fr/configuration.md +355 -134
- package/docs/fr/intlayer_with_adonisjs.md +1 -1
- package/docs/fr/intlayer_with_express.md +1 -1
- package/docs/fr/intlayer_with_fastify.md +1 -1
- package/docs/fr/intlayer_with_hono.md +1 -1
- package/docs/fr/intlayer_with_nestjs.md +1 -1
- package/docs/fr/intlayer_with_nextjs_16.md +183 -7
- package/docs/fr/intlayer_with_nextjs_compiler.md +179 -3
- package/docs/fr/intlayer_with_react_router_v7.md +229 -3
- package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +237 -6
- package/docs/fr/intlayer_with_svelte_kit.md +158 -2
- package/docs/fr/intlayer_with_tanstack.md +159 -1
- package/docs/fr/intlayer_with_vite+preact.md +164 -8
- package/docs/fr/intlayer_with_vite+react.md +162 -6
- package/docs/fr/intlayer_with_vite+solid.md +163 -7
- package/docs/fr/intlayer_with_vite+svelte.md +157 -1
- package/docs/fr/intlayer_with_vite+vue.md +164 -8
- package/docs/hi/compiler.md +81 -46
- package/docs/hi/configuration.md +87 -44
- package/docs/hi/intlayer_with_nextjs_16.md +174 -1
- package/docs/hi/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/hi/intlayer_with_react_router_v7.md +224 -1
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/hi/intlayer_with_svelte_kit.md +158 -2
- package/docs/hi/intlayer_with_tanstack.md +159 -1
- package/docs/hi/intlayer_with_vite+preact.md +157 -1
- package/docs/hi/intlayer_with_vite+react.md +157 -1
- package/docs/hi/intlayer_with_vite+solid.md +157 -1
- package/docs/hi/intlayer_with_vite+svelte.md +157 -1
- package/docs/hi/intlayer_with_vite+vue.md +157 -1
- package/docs/id/compiler.md +84 -51
- package/docs/id/configuration.md +83 -45
- package/docs/id/intlayer_with_nextjs_16.md +174 -1
- package/docs/id/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/id/intlayer_with_react_router_v7.md +224 -1
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/id/intlayer_with_svelte_kit.md +158 -2
- package/docs/id/intlayer_with_tanstack.md +159 -1
- package/docs/id/intlayer_with_vite+preact.md +157 -1
- package/docs/id/intlayer_with_vite+react.md +157 -1
- package/docs/id/intlayer_with_vite+solid.md +157 -1
- package/docs/id/intlayer_with_vite+svelte.md +157 -1
- package/docs/id/intlayer_with_vite+vue.md +157 -1
- package/docs/it/compiler.md +81 -46
- package/docs/it/configuration.md +426 -204
- package/docs/it/intlayer_with_nextjs_16.md +174 -1
- package/docs/it/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/it/intlayer_with_react_router_v7.md +225 -2
- package/docs/it/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/it/intlayer_with_svelte_kit.md +158 -2
- package/docs/it/intlayer_with_tanstack.md +159 -1
- package/docs/it/intlayer_with_vite+preact.md +157 -1
- package/docs/it/intlayer_with_vite+react.md +157 -1
- package/docs/it/intlayer_with_vite+solid.md +159 -3
- package/docs/it/intlayer_with_vite+svelte.md +157 -1
- package/docs/it/intlayer_with_vite+vue.md +157 -1
- package/docs/ja/compiler.md +94 -58
- package/docs/ja/configuration.md +88 -45
- package/docs/ja/intlayer_with_nextjs_16.md +174 -1
- package/docs/ja/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ja/intlayer_with_react_router_v7.md +184 -394
- package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/ja/intlayer_with_svelte_kit.md +119 -595
- package/docs/ja/intlayer_with_tanstack.md +131 -642
- package/docs/ja/intlayer_with_vite+preact.md +111 -1231
- package/docs/ja/intlayer_with_vite+react.md +129 -1304
- package/docs/ja/intlayer_with_vite+solid.md +159 -3
- package/docs/ja/intlayer_with_vite+svelte.md +157 -1
- package/docs/ja/intlayer_with_vite+vue.md +157 -1
- package/docs/ko/compiler.md +88 -52
- package/docs/ko/configuration.md +87 -44
- package/docs/ko/intlayer_with_nextjs_16.md +174 -1
- package/docs/ko/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ko/intlayer_with_react_router_v7.md +225 -2
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +226 -2
- package/docs/ko/intlayer_with_svelte_kit.md +158 -2
- package/docs/ko/intlayer_with_tanstack.md +159 -1
- package/docs/ko/intlayer_with_vite+preact.md +157 -1
- package/docs/ko/intlayer_with_vite+react.md +157 -1
- package/docs/ko/intlayer_with_vite+solid.md +159 -3
- package/docs/ko/intlayer_with_vite+svelte.md +157 -1
- package/docs/ko/intlayer_with_vite+vue.md +157 -1
- package/docs/pl/compiler.md +84 -51
- package/docs/pl/configuration.md +83 -37
- package/docs/pl/intlayer_with_nextjs_16.md +174 -1
- package/docs/pl/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/pl/intlayer_with_react_router_v7.md +224 -1
- package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/pl/intlayer_with_svelte_kit.md +158 -2
- package/docs/pl/intlayer_with_tanstack.md +159 -1
- package/docs/pl/intlayer_with_vite+preact.md +157 -1
- package/docs/pl/intlayer_with_vite+react.md +157 -1
- package/docs/pl/intlayer_with_vite+solid.md +157 -1
- package/docs/pl/intlayer_with_vite+svelte.md +157 -1
- package/docs/pl/intlayer_with_vite+vue.md +157 -1
- package/docs/pt/compiler.md +81 -46
- package/docs/pt/configuration.md +404 -194
- package/docs/pt/intlayer_with_nextjs_16.md +174 -1
- package/docs/pt/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/pt/intlayer_with_react_router_v7.md +224 -1
- package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/pt/intlayer_with_svelte_kit.md +158 -2
- package/docs/pt/intlayer_with_tanstack.md +159 -1
- package/docs/pt/intlayer_with_vite+preact.md +157 -1
- package/docs/pt/intlayer_with_vite+react.md +157 -1
- package/docs/pt/intlayer_with_vite+solid.md +157 -1
- package/docs/pt/intlayer_with_vite+svelte.md +157 -1
- package/docs/pt/intlayer_with_vite+vue.md +157 -1
- package/docs/ru/compiler.md +90 -57
- package/docs/ru/configuration.md +76 -46
- package/docs/ru/intlayer_with_nextjs_16.md +174 -1
- package/docs/ru/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/ru/intlayer_with_react_router_v7.md +224 -1
- package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/ru/intlayer_with_svelte_kit.md +158 -2
- package/docs/ru/intlayer_with_tanstack.md +159 -1
- package/docs/ru/intlayer_with_vite+preact.md +157 -1
- package/docs/ru/intlayer_with_vite+react.md +157 -1
- package/docs/ru/intlayer_with_vite+solid.md +157 -1
- package/docs/ru/intlayer_with_vite+svelte.md +157 -1
- package/docs/ru/intlayer_with_vite+vue.md +157 -1
- package/docs/tr/compiler.md +85 -52
- package/docs/tr/configuration.md +83 -40
- package/docs/tr/intlayer_with_nextjs_16.md +174 -1
- package/docs/tr/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/tr/intlayer_with_react_router_v7.md +224 -1
- package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/tr/intlayer_with_svelte_kit.md +158 -2
- package/docs/tr/intlayer_with_tanstack.md +159 -1
- package/docs/tr/intlayer_with_vite+preact.md +157 -1
- package/docs/tr/intlayer_with_vite+react.md +157 -1
- package/docs/tr/intlayer_with_vite+solid.md +157 -1
- package/docs/tr/intlayer_with_vite+svelte.md +157 -1
- package/docs/tr/intlayer_with_vite+vue.md +157 -1
- package/docs/uk/compiler.md +96 -61
- package/docs/uk/configuration.md +83 -37
- package/docs/uk/intlayer_with_nextjs_16.md +174 -1
- package/docs/uk/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/uk/intlayer_with_react_router_v7.md +224 -1
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/uk/intlayer_with_svelte_kit.md +157 -1
- package/docs/uk/intlayer_with_tanstack.md +159 -1
- package/docs/uk/intlayer_with_vite+preact.md +157 -1
- package/docs/uk/intlayer_with_vite+react.md +157 -1
- package/docs/uk/intlayer_with_vite+solid.md +157 -1
- package/docs/uk/intlayer_with_vite+svelte.md +157 -1
- package/docs/uk/intlayer_with_vite+vue.md +157 -1
- package/docs/vi/compiler.md +85 -50
- package/docs/vi/configuration.md +85 -39
- package/docs/vi/intlayer_with_nextjs_16.md +174 -1
- package/docs/vi/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/vi/intlayer_with_react_router_v7.md +224 -1
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +225 -1
- package/docs/vi/intlayer_with_svelte_kit.md +158 -2
- package/docs/vi/intlayer_with_tanstack.md +159 -1
- package/docs/vi/intlayer_with_vite+preact.md +157 -1
- package/docs/vi/intlayer_with_vite+react.md +157 -1
- package/docs/vi/intlayer_with_vite+solid.md +157 -1
- package/docs/vi/intlayer_with_vite+svelte.md +157 -1
- package/docs/vi/intlayer_with_vite+vue.md +157 -1
- package/docs/zh/compiler.md +84 -49
- package/docs/zh/configuration.md +80 -37
- package/docs/zh/intlayer_with_adonisjs.md +1 -1
- package/docs/zh/intlayer_with_express.md +1 -1
- package/docs/zh/intlayer_with_fastify.md +1 -1
- package/docs/zh/intlayer_with_hono.md +1 -1
- package/docs/zh/intlayer_with_nestjs.md +1 -1
- package/docs/zh/intlayer_with_nextjs_16.md +174 -1
- package/docs/zh/intlayer_with_nextjs_compiler.md +174 -1
- package/docs/zh/intlayer_with_react_router_v7.md +227 -4
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +228 -4
- package/docs/zh/intlayer_with_svelte_kit.md +158 -2
- package/docs/zh/intlayer_with_tanstack.md +159 -1
- package/docs/zh/intlayer_with_vite+preact.md +159 -3
- package/docs/zh/intlayer_with_vite+react.md +157 -1
- package/docs/zh/intlayer_with_vite+solid.md +161 -5
- package/docs/zh/intlayer_with_vite+svelte.md +157 -1
- package/docs/zh/intlayer_with_vite+vue.md +158 -2
- package/package.json +6 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-01-10
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-03-12
|
|
4
4
|
title: Next.js i18n - 기존 Next.js 앱을 다국어 앱으로 변환하기 2026
|
|
5
5
|
description: Intlayer Compiler를 사용하여 기존 Next.js 애플리케이션을 다국어로 만드는 방법을 알아보세요. 문서를 따라 국제화(i18n)하고 AI로 번역하세요.
|
|
6
6
|
keywords:
|
|
@@ -495,6 +495,179 @@ Intlayer를 사용한 개발 환경을 개선하기 위해 **공식 Intlayer VS
|
|
|
495
495
|
|
|
496
496
|
익스텐션 사용법에 대한 자세한 내용은 [Intlayer VS Code 익스텐션 문서](https://intlayer.org/doc/vs-code-extension)를 참조하세요.
|
|
497
497
|
|
|
498
|
+
### (선택 사항) 단계 1 : 컴포넌트 콘텐츠 추출
|
|
499
|
+
|
|
500
|
+
기존 코드베이스가 있는 경우 수천 개의 파일을 변환하는 데 시간이 많이 걸릴 수 있습니다.
|
|
501
|
+
|
|
502
|
+
이 프로세스를 용이하게 하기 위해 Intlayer는 컴포넌트를 변환하고 콘텐츠를 추출하기 위한 [컴파일러](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/compiler.md) / [추출기](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/cli/extract.md)를 제안합니다.
|
|
503
|
+
|
|
504
|
+
설정하려면 `intlayer.config.ts` 파일에 `compiler` 섹션을 추가할 수 있습니다.
|
|
505
|
+
|
|
506
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
507
|
+
import { type IntlayerConfig } from "intlayer";
|
|
508
|
+
|
|
509
|
+
const config: IntlayerConfig = {
|
|
510
|
+
// ... 나머지 구성
|
|
511
|
+
compiler: {
|
|
512
|
+
/**
|
|
513
|
+
* 컴파일러 활성화 여부를 나타냅니다.
|
|
514
|
+
*/
|
|
515
|
+
enabled: true,
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* 출력 파일 경로를 정의합니다.
|
|
519
|
+
*/
|
|
520
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다. 그렇게 하면 컴파일러를 한 번만 실행하여 앱을 변환한 다음 제거할 수 있습니다.
|
|
524
|
+
*/
|
|
525
|
+
saveComponents: false,
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* 사전 키 접두사
|
|
529
|
+
*/
|
|
530
|
+
dictionaryKeyPrefix: "",
|
|
531
|
+
},
|
|
532
|
+
};
|
|
533
|
+
|
|
534
|
+
export default config;
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
538
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
539
|
+
const config = {
|
|
540
|
+
// ... 나머지 구성
|
|
541
|
+
compiler: {
|
|
542
|
+
/**
|
|
543
|
+
* 컴파일러 활성화 여부를 나타냅니다.
|
|
544
|
+
*/
|
|
545
|
+
enabled: true,
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* 출력 파일 경로를 정의합니다.
|
|
549
|
+
*/
|
|
550
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
551
|
+
|
|
552
|
+
/**
|
|
553
|
+
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다. 그렇게 하면 컴파일러를 한 번만 실행하여 앱을 변환한 다음 제거할 수 있습니다.
|
|
554
|
+
*/
|
|
555
|
+
saveComponents: false,
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* 사전 키 접두사
|
|
559
|
+
*/
|
|
560
|
+
dictionaryKeyPrefix: "",
|
|
561
|
+
},
|
|
562
|
+
};
|
|
563
|
+
|
|
564
|
+
export default config;
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
568
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
569
|
+
const config = {
|
|
570
|
+
// ... 나머지 구성
|
|
571
|
+
compiler: {
|
|
572
|
+
/**
|
|
573
|
+
* 컴파일러 활성화 여부를 나타냅니다.
|
|
574
|
+
*/
|
|
575
|
+
enabled: true,
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* 출력 파일 경로를 정의합니다.
|
|
579
|
+
*/
|
|
580
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
581
|
+
|
|
582
|
+
/**
|
|
583
|
+
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다. 그렇게 하면 컴파일러를 한 번만 실행하여 앱을 변환한 다음 제거할 수 있습니다.
|
|
584
|
+
*/
|
|
585
|
+
saveComponents: false,
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* 사전 키 접두사
|
|
589
|
+
*/
|
|
590
|
+
dictionaryKeyPrefix: "",
|
|
591
|
+
},
|
|
592
|
+
};
|
|
593
|
+
|
|
594
|
+
module.exports = config;
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
<Tabs>
|
|
598
|
+
<Tab value='추출 명령'>
|
|
599
|
+
|
|
600
|
+
컴포넌트를 변환하고 콘텐츠를 추출하기 위해 추출기를 실행합니다
|
|
601
|
+
|
|
602
|
+
```bash packageManager="npm"
|
|
603
|
+
npx intlayer extract
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
```bash packageManager="pnpm"
|
|
607
|
+
pnpm intlayer extract
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
```bash packageManager="yarn"
|
|
611
|
+
yarn intlayer extract
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
```bash packageManager="bun"
|
|
615
|
+
bunx intlayer extract
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
</Tab>
|
|
619
|
+
<Tab value='Babel 컴파일러'>
|
|
620
|
+
|
|
621
|
+
```bash packageManager="npm"
|
|
622
|
+
npm install @intlayer/babel --save-dev
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
```bash packageManager="pnpm"
|
|
626
|
+
pnpm add @intlayer/babel --save-dev
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
```bash packageManager="yarn"
|
|
630
|
+
yarn add @intlayer/babel --save-dev
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
```bash packageManager="bun"
|
|
634
|
+
bun add @intlayer/babel --dev
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
```js fileName="babel.config.js"
|
|
638
|
+
const {
|
|
639
|
+
intlayerExtractBabelPlugin,
|
|
640
|
+
getExtractPluginOptions,
|
|
641
|
+
} = require("@intlayer/babel");
|
|
642
|
+
|
|
643
|
+
module.exports = {
|
|
644
|
+
presets: ["next/babel"],
|
|
645
|
+
plugins: [
|
|
646
|
+
// 컴포넌트에서 콘텐츠를 사전으로 추출
|
|
647
|
+
[intlayerExtractBabelPlugin, getExtractPluginOptions()],
|
|
648
|
+
],
|
|
649
|
+
};
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
```bash packageManager="npm"
|
|
653
|
+
npm run build # 또는 npm run dev
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
```bash packageManager="pnpm"
|
|
657
|
+
pnpm run build # 또는 pnpm run dev
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
```bash packageManager="yarn"
|
|
661
|
+
yarn build # 또는 yarn dev
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
```bash packageManager="bun"
|
|
665
|
+
bun run build # Or bun run dev
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
</Tab>
|
|
669
|
+
</Tabs>
|
|
670
|
+
|
|
498
671
|
### 더 알아보기
|
|
499
672
|
|
|
500
673
|
더 나아가려면 [비주얼 에디터](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)를 사용하여 콘텐츠를 외부화할 수 있습니다.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-04
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-03-12
|
|
4
4
|
title: React Router v7 i18n - React Router v7 앱 번역 방법 2026
|
|
5
5
|
description: Intlayer를 사용하여 React Router v7 애플리케이션에 국제화(i18n)를 추가하는 방법을 배우세요. 로케일 인식 라우팅으로 앱을 다국어로 만드는 종합 가이드를 따르세요.
|
|
6
6
|
keywords:
|
|
@@ -38,7 +38,7 @@ history:
|
|
|
38
38
|
|
|
39
39
|
이 가이드는 React Router v7 프로젝트에서 로케일 인식 라우팅, TypeScript 지원 및 최신 개발 방식을 활용하여 **Intlayer**를 통합해 원활한 국제화(i18n)를 구현하는 방법을 보여줍니다.
|
|
40
40
|
|
|
41
|
-
##
|
|
41
|
+
## 목차
|
|
42
42
|
|
|
43
43
|
<TOC/>
|
|
44
44
|
|
|
@@ -504,6 +504,229 @@ export default function RootLayout() {
|
|
|
504
504
|
}
|
|
505
505
|
```
|
|
506
506
|
|
|
507
|
+
### (선택 사항) 단계 5 : 컴포넌트 콘텐츠 추출
|
|
508
|
+
|
|
509
|
+
기존 코드베이스가 있는 경우 수천 개의 파일을 변환하는 데 시간이 많이 걸릴 수 있습니다.
|
|
510
|
+
|
|
511
|
+
이 프로세스를 용이하게 하기 위해 Intlayer는 컴포넌트를 변환하고 콘텐츠를 추출하기 위한 [컴파일러](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/compiler.md) / [추출기](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/cli/extract.md)를 제안합니다.
|
|
512
|
+
|
|
513
|
+
설정하려면 `intlayer.config.ts` 파일에 `compiler` 섹션을 추가할 수 있습니다.
|
|
514
|
+
|
|
515
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
516
|
+
import { type IntlayerConfig } from "intlayer";
|
|
517
|
+
|
|
518
|
+
const config: IntlayerConfig = {
|
|
519
|
+
// ... 나머지 구성
|
|
520
|
+
compiler: {
|
|
521
|
+
/**
|
|
522
|
+
* 컴파일러 활성화 여부를 나타냅니다.
|
|
523
|
+
*/
|
|
524
|
+
enabled: true,
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* 출력 파일 경로를 정의합니다.
|
|
528
|
+
*/
|
|
529
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다. 그렇게 하면 컴파일러를 한 번만 실행하여 앱을 변환한 다음 제거할 수 있습니다.
|
|
533
|
+
*/
|
|
534
|
+
saveComponents: false,
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* 사전 키 접두사
|
|
538
|
+
*/
|
|
539
|
+
dictionaryKeyPrefix: "",
|
|
540
|
+
},
|
|
541
|
+
};
|
|
542
|
+
|
|
543
|
+
export default config;
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
547
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
548
|
+
const config = {
|
|
549
|
+
// ... 나머지 구성
|
|
550
|
+
compiler: {
|
|
551
|
+
/**
|
|
552
|
+
* 컴파일러 활성화 여부를 나타냅니다.
|
|
553
|
+
*/
|
|
554
|
+
enabled: true,
|
|
555
|
+
|
|
556
|
+
/**
|
|
557
|
+
* 출력 파일 경로를 정의합니다.
|
|
558
|
+
*/
|
|
559
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다. 그렇게 하면 컴파일러를 한 번만 실행하여 앱을 변환한 다음 제거할 수 있습니다.
|
|
563
|
+
*/
|
|
564
|
+
saveComponents: false,
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* 사전 키 접두사
|
|
568
|
+
*/
|
|
569
|
+
dictionaryKeyPrefix: "",
|
|
570
|
+
},
|
|
571
|
+
};
|
|
572
|
+
|
|
573
|
+
export default config;
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
577
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
578
|
+
const config = {
|
|
579
|
+
// ... 나머지 구성
|
|
580
|
+
compiler: {
|
|
581
|
+
/**
|
|
582
|
+
* 컴파일러 활성화 여부를 나타냅니다.
|
|
583
|
+
*/
|
|
584
|
+
enabled: true,
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* 출력 파일 경로를 정의합니다.
|
|
588
|
+
*/
|
|
589
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
590
|
+
|
|
591
|
+
/**
|
|
592
|
+
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다. 그렇게 하면 컴파일러를 한 번만 실행하여 앱을 변환한 다음 제거할 수 있습니다.
|
|
593
|
+
*/
|
|
594
|
+
saveComponents: false,
|
|
595
|
+
|
|
596
|
+
/**
|
|
597
|
+
* 사전 키 접두사
|
|
598
|
+
*/
|
|
599
|
+
dictionaryKeyPrefix: "",
|
|
600
|
+
},
|
|
601
|
+
};
|
|
602
|
+
|
|
603
|
+
module.exports = config;
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
<Tabs>
|
|
607
|
+
<Tab value='추출 명령'>
|
|
608
|
+
|
|
609
|
+
컴포넌트를 변환하고 콘텐츠를 추출하기 위해 추출기를 실행합니다
|
|
610
|
+
|
|
611
|
+
```bash packageManager="npm"
|
|
612
|
+
npx intlayer extract
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
```bash packageManager="pnpm"
|
|
616
|
+
pnpm intlayer extract
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
```bash packageManager="yarn"
|
|
620
|
+
yarn intlayer extract
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
```bash packageManager="bun"
|
|
624
|
+
bunx intlayer extract
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
</Tab>
|
|
628
|
+
<Tab value='Babel 컴파일러'>
|
|
629
|
+
|
|
630
|
+
`vite.config.ts`를 업데이트하여 `intlayerCompiler` 플러그인을 포함합니다.
|
|
631
|
+
|
|
632
|
+
```ts fileName="vite.config.ts"
|
|
633
|
+
import { defineConfig } from "vite";
|
|
634
|
+
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
635
|
+
|
|
636
|
+
export default defineConfig({
|
|
637
|
+
plugins: [
|
|
638
|
+
intlayer(),
|
|
639
|
+
intlayerCompiler(), // 컴파일러 플러그인을 추가합니다
|
|
640
|
+
],
|
|
641
|
+
});
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
```bash packageManager="npm"
|
|
645
|
+
npm run build # 또는 npm run dev
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
```bash packageManager="pnpm"
|
|
649
|
+
pnpm run build # 또는 pnpm run dev
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
```bash packageManager="yarn"
|
|
653
|
+
yarn build # 또는 yarn dev
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
```bash packageManager="bun"
|
|
657
|
+
bun run build # Or bun run dev
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
</Tab>
|
|
661
|
+
</Tabs>
|
|
662
|
+
|
|
663
|
+
---
|
|
664
|
+
|
|
665
|
+
## Configure TypeScript
|
|
666
|
+
|
|
667
|
+
Intlayer uses module augmentation to get benefits of TypeScript and make your codebase stronger.
|
|
668
|
+
|
|
669
|
+
Ensure your TypeScript configuration includes the autogenerated types:
|
|
670
|
+
|
|
671
|
+
```json5 fileName="tsconfig.json"
|
|
672
|
+
{
|
|
673
|
+
// ... your existing configurations
|
|
674
|
+
include: [
|
|
675
|
+
// ... your existing includes
|
|
676
|
+
".intlayer/**/*.ts", // Include the auto-generated types
|
|
677
|
+
],
|
|
678
|
+
}
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
---
|
|
682
|
+
|
|
683
|
+
## Git Configuration
|
|
684
|
+
|
|
685
|
+
It is recommended to ignore the files generated by Intlayer. This allows you to avoid committing them to your Git repository.
|
|
686
|
+
|
|
687
|
+
To do this, you can add the following instructions to your `.gitignore` file:
|
|
688
|
+
|
|
689
|
+
```plaintext fileName=".gitignore"
|
|
690
|
+
# Intlayer에서 생성된 파일 무시
|
|
691
|
+
.intlayer
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
---
|
|
695
|
+
|
|
696
|
+
## VS Code Extension
|
|
697
|
+
|
|
698
|
+
To improve your development experience with Intlayer, you can install the official **Intlayer VS Code Extension**.
|
|
699
|
+
|
|
700
|
+
[Install from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
701
|
+
|
|
702
|
+
This extension provides:
|
|
703
|
+
|
|
704
|
+
- **Autocompletion** for translation keys.
|
|
705
|
+
- **Real-time error detection** for missing translations.
|
|
706
|
+
- **Inline previews** of translated content.
|
|
707
|
+
- **Quick actions** to easily create and update translations.
|
|
708
|
+
|
|
709
|
+
For more details on how to use the extension, refer to the [Intlayer VS Code Extension documentation](https://intlayer.org/doc/vs-code-extension).
|
|
710
|
+
|
|
711
|
+
---
|
|
712
|
+
|
|
713
|
+
## Go Further
|
|
714
|
+
|
|
715
|
+
To go further, you can implement the [visual editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_visual_editor.md) or externalize your content using the [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_CMS.md).
|
|
716
|
+
|
|
717
|
+
---
|
|
718
|
+
|
|
719
|
+
## Documentation References
|
|
720
|
+
|
|
721
|
+
- [Intlayer Documentation](https://intlayer.org)
|
|
722
|
+
- [React Router v7 Documentation](https://reactrouter.com/)
|
|
723
|
+
- [useIntlayer hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useIntlayer.md)
|
|
724
|
+
- [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useLocale.md)
|
|
725
|
+
- [Content Declaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md)
|
|
726
|
+
- [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md)
|
|
727
|
+
|
|
728
|
+
This comprehensive guide provides everything you need to integrate Intlayer with React Router v7 for a fully internationalized application with locale-aware routing and TypeScript support.
|
|
729
|
+
|
|
507
730
|
### 11단계: 미들웨어 추가 (선택 사항)
|
|
508
731
|
|
|
509
732
|
`intlayerProxy`를 사용하여 애플리케이션에 서버 사이드 라우팅을 추가할 수도 있습니다. 이 플러그인은 URL을 기반으로 현재 로케일을 자동으로 감지하고 적절한 로케일 쿠키를 설정합니다. 로케일이 지정되지 않은 경우, 플러그인은 사용자의 브라우저 언어 설정을 기반으로 가장 적합한 로케일을 결정합니다. 로케일이 감지되지 않으면 기본 로케일로 리디렉션합니다.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-04
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-03-12
|
|
4
4
|
title: React Router v7 i18n - React Router v7 앱 번역 방법 2026
|
|
5
5
|
description: Intlayer를 사용하여 React Router v7 애플리케이션에 국제화(i18n)를 추가하는 방법을 배우세요. 로케일 인식 라우팅으로 앱을 다국어로 만드는 종합 가이드를 따르세요.
|
|
6
6
|
keywords:
|
|
@@ -37,7 +37,7 @@ history:
|
|
|
37
37
|
|
|
38
38
|
클라이언트 사이드 라우팅의 경우 [Intlayer와 React Router v7](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_with_react_router_v7.md) 가이드를 참조하세요.
|
|
39
39
|
|
|
40
|
-
##
|
|
40
|
+
## 목차
|
|
41
41
|
|
|
42
42
|
<TOC/>
|
|
43
43
|
|
|
@@ -449,6 +449,230 @@ export default function RootLayout() {
|
|
|
449
449
|
}
|
|
450
450
|
```
|
|
451
451
|
|
|
452
|
+
### (선택 사항) 단계 5 : 컴포넌트 콘텐츠 추출
|
|
453
|
+
|
|
454
|
+
기존 코드베이스가 있는 경우 수천 개의 파일을 변환하는 데 시간이 많이 걸릴 수 있습니다.
|
|
455
|
+
|
|
456
|
+
이 프로세스를 용이하게 하기 위해 Intlayer는 컴포넌트를 변환하고 콘텐츠를 추출하기 위한 [컴파일러](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/compiler.md) / [추출기](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/cli/extract.md)를 제안합니다.
|
|
457
|
+
|
|
458
|
+
설정하려면 `intlayer.config.ts` 파일에 `compiler` 섹션을 추가할 수 있습니다.
|
|
459
|
+
|
|
460
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
461
|
+
import { type IntlayerConfig } from "intlayer";
|
|
462
|
+
|
|
463
|
+
const config: IntlayerConfig = {
|
|
464
|
+
// ... 나머지 구성
|
|
465
|
+
compiler: {
|
|
466
|
+
/**
|
|
467
|
+
* 컴파일러 활성화 여부를 나타냅니다.
|
|
468
|
+
*/
|
|
469
|
+
enabled: true,
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* 출력 파일 경로를 정의합니다.
|
|
473
|
+
*/
|
|
474
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다. 그렇게 하면 컴파일러를 한 번만 실행하여 앱을 변환한 다음 제거할 수 있습니다.
|
|
478
|
+
*/
|
|
479
|
+
saveComponents: false,
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* 사전 키 접두사
|
|
483
|
+
*/
|
|
484
|
+
dictionaryKeyPrefix: "",
|
|
485
|
+
},
|
|
486
|
+
};
|
|
487
|
+
|
|
488
|
+
export default config;
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
492
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
493
|
+
const config = {
|
|
494
|
+
// ... 나머지 구성
|
|
495
|
+
compiler: {
|
|
496
|
+
/**
|
|
497
|
+
* 컴파일러 활성화 여부를 나타냅니다.
|
|
498
|
+
*/
|
|
499
|
+
enabled: true,
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* 출력 파일 경로를 정의합니다.
|
|
503
|
+
*/
|
|
504
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다. 그렇게 하면 컴파일러를 한 번만 실행하여 앱을 변환한 다음 제거할 수 있습니다.
|
|
508
|
+
*/
|
|
509
|
+
saveComponents: false,
|
|
510
|
+
|
|
511
|
+
/**
|
|
512
|
+
* 사전 키 접두사
|
|
513
|
+
*/
|
|
514
|
+
dictionaryKeyPrefix: "",
|
|
515
|
+
},
|
|
516
|
+
};
|
|
517
|
+
|
|
518
|
+
export default config;
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
522
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
523
|
+
const config = {
|
|
524
|
+
// ... 나머지 구성
|
|
525
|
+
compiler: {
|
|
526
|
+
/**
|
|
527
|
+
* 컴파일러 활성화 여부를 나타냅니다.
|
|
528
|
+
*/
|
|
529
|
+
enabled: true,
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* 출력 파일 경로를 정의합니다.
|
|
533
|
+
*/
|
|
534
|
+
output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* 변환 후 컴포넌트를 저장할지 여부를 나타냅니다. 그렇게 하면 컴파일러를 한 번만 실행하여 앱을 변환한 다음 제거할 수 있습니다.
|
|
538
|
+
*/
|
|
539
|
+
saveComponents: false,
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* 사전 키 접두사
|
|
543
|
+
*/
|
|
544
|
+
dictionaryKeyPrefix: "",
|
|
545
|
+
},
|
|
546
|
+
};
|
|
547
|
+
|
|
548
|
+
module.exports = config;
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
<Tabs>
|
|
552
|
+
<Tab value='추출 명령'>
|
|
553
|
+
|
|
554
|
+
컴포넌트를 변환하고 콘텐츠를 추출하기 위해 추출기를 실행합니다
|
|
555
|
+
|
|
556
|
+
```bash packageManager="npm"
|
|
557
|
+
npx intlayer extract
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
```bash packageManager="pnpm"
|
|
561
|
+
pnpm intlayer extract
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
```bash packageManager="yarn"
|
|
565
|
+
yarn intlayer extract
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
```bash packageManager="bun"
|
|
569
|
+
bunx intlayer extract
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
</Tab>
|
|
573
|
+
<Tab value='Babel 컴파일러'>
|
|
574
|
+
|
|
575
|
+
`vite.config.ts`를 업데이트하여 `intlayerCompiler` 플러그인을 포함합니다.
|
|
576
|
+
|
|
577
|
+
```ts fileName="vite.config.ts"
|
|
578
|
+
import { defineConfig } from "vite";
|
|
579
|
+
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
580
|
+
|
|
581
|
+
export default defineConfig({
|
|
582
|
+
plugins: [
|
|
583
|
+
intlayer(),
|
|
584
|
+
intlayerCompiler(), // 컴파일러 플러그인을 추가합니다
|
|
585
|
+
],
|
|
586
|
+
});
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
```bash packageManager="npm"
|
|
590
|
+
npm run build # 또는 npm run dev
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
```bash packageManager="pnpm"
|
|
594
|
+
pnpm run build # 또는 pnpm run dev
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
```bash packageManager="yarn"
|
|
598
|
+
yarn build # 또는 yarn dev
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
```bash packageManager="bun"
|
|
602
|
+
bun run build # Or bun run dev
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
</Tab>
|
|
606
|
+
</Tabs>
|
|
607
|
+
|
|
608
|
+
---
|
|
609
|
+
|
|
610
|
+
## Configure TypeScript
|
|
611
|
+
|
|
612
|
+
Intlayer uses module augmentation to get benefits of TypeScript and make your codebase stronger.
|
|
613
|
+
|
|
614
|
+
Ensure your TypeScript configuration includes the autogenerated types:
|
|
615
|
+
|
|
616
|
+
```json5 fileName="tsconfig.json"
|
|
617
|
+
{
|
|
618
|
+
// ... your existing configurations
|
|
619
|
+
include: [
|
|
620
|
+
// ... your existing includes
|
|
621
|
+
".intlayer/**/*.ts", // Include the auto-generated types
|
|
622
|
+
],
|
|
623
|
+
}
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
---
|
|
627
|
+
|
|
628
|
+
## Git Configuration
|
|
629
|
+
|
|
630
|
+
It is recommended to ignore the files generated by Intlayer. This allows you to avoid committing them to your Git repository.
|
|
631
|
+
|
|
632
|
+
To do this, you can add the following instructions to your `.gitignore` file:
|
|
633
|
+
|
|
634
|
+
```plaintext fileName=".gitignore"
|
|
635
|
+
# Intlayer에서 생성된 파일 무시
|
|
636
|
+
.intlayer
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
---
|
|
640
|
+
|
|
641
|
+
## VS Code Extension
|
|
642
|
+
|
|
643
|
+
To improve your development experience with Intlayer, you can install the official **Intlayer VS Code Extension**.
|
|
644
|
+
|
|
645
|
+
[Install from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
646
|
+
|
|
647
|
+
This extension provides:
|
|
648
|
+
|
|
649
|
+
- **Autocompletion** for translation keys.
|
|
650
|
+
- **Real-time error detection** for missing translations.
|
|
651
|
+
- **Inline previews** of translated content.
|
|
652
|
+
- **Quick actions** to easily create and update translations.
|
|
653
|
+
|
|
654
|
+
For more details on how to use the extension, refer to the [Intlayer VS Code Extension documentation](https://intlayer.org/doc/vs-code-extension).
|
|
655
|
+
|
|
656
|
+
---
|
|
657
|
+
|
|
658
|
+
## Go Further
|
|
659
|
+
|
|
660
|
+
To go further, you can implement the [visual editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_visual_editor.md) or externalize your content using the [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_CMS.md).
|
|
661
|
+
|
|
662
|
+
---
|
|
663
|
+
|
|
664
|
+
## Documentation References
|
|
665
|
+
|
|
666
|
+
- [Intlayer Documentation](https://intlayer.org)
|
|
667
|
+
- [React Router v7 Documentation](https://reactrouter.com/)
|
|
668
|
+
- [React Router fs-routes Documentation](https://reactrouter.com/how-to/file-route-conventions)
|
|
669
|
+
- [useIntlayer hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useIntlayer.md)
|
|
670
|
+
- [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useLocale.md)
|
|
671
|
+
- [Content Declaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md)
|
|
672
|
+
- [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md)
|
|
673
|
+
|
|
674
|
+
This comprehensive guide provides everything you need to integrate Intlayer with React Router v7 using file-system based routing for a fully internationalized application with locale-aware routing and TypeScript support.
|
|
675
|
+
|
|
452
676
|
### 11단계: 미들웨어 추가 (선택 사항)
|
|
453
677
|
|
|
454
678
|
`intlayerProxy`를 사용하여 애플리케이션에 서버 사이드 라우팅을 추가할 수도 있습니다. 이 플러그인은 URL을 기반으로 현재 로케일을 자동으로 감지하고 적절한 로케일 쿠키를 설정합니다. 로케일이 지정되지 않은 경우, 플러그인은 사용자의 브라우저 언어 설정을 기반으로 가장 적합한 로케일을 결정합니다. 로케일이 감지되지 않으면 기본 로케일로 리디렉션합니다.
|