@intlayer/docs 7.0.3 → 7.0.4
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/blog/ar/intlayer_with_i18next.md +68 -106
- package/blog/ar/intlayer_with_next-i18next.md +84 -288
- package/blog/ar/intlayer_with_next-intl.md +58 -337
- package/blog/ar/intlayer_with_react-i18next.md +68 -290
- package/blog/ar/intlayer_with_react-intl.md +63 -266
- package/blog/de/intlayer_with_i18next.md +77 -97
- package/blog/de/intlayer_with_next-i18next.md +69 -296
- package/blog/de/intlayer_with_next-intl.md +59 -340
- package/blog/de/intlayer_with_react-i18next.md +68 -290
- package/blog/de/intlayer_with_react-intl.md +62 -264
- package/blog/en/intlayer_with_i18next.md +67 -103
- package/blog/en/intlayer_with_next-i18next.md +69 -294
- package/blog/en/intlayer_with_next-intl.md +48 -300
- package/blog/en/intlayer_with_react-i18next.md +61 -289
- package/blog/en/intlayer_with_react-intl.md +61 -284
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/en-GB/intlayer_with_i18next.md +67 -103
- package/blog/en-GB/intlayer_with_next-i18next.md +71 -292
- package/blog/en-GB/intlayer_with_next-intl.md +58 -337
- package/blog/en-GB/intlayer_with_react-i18next.md +67 -289
- package/blog/en-GB/intlayer_with_react-intl.md +61 -264
- package/blog/es/intlayer_with_i18next.md +67 -103
- package/blog/es/intlayer_with_next-i18next.md +71 -296
- package/blog/es/intlayer_with_next-intl.md +57 -338
- package/blog/es/intlayer_with_react-i18next.md +68 -290
- package/blog/es/intlayer_with_react-intl.md +62 -265
- package/blog/fr/intlayer_with_i18next.md +66 -104
- package/blog/fr/intlayer_with_next-i18next.md +82 -285
- package/blog/fr/intlayer_with_next-intl.md +57 -338
- package/blog/fr/intlayer_with_react-i18next.md +67 -289
- package/blog/fr/intlayer_with_react-intl.md +61 -264
- package/blog/hi/intlayer_with_i18next.md +68 -104
- package/blog/hi/intlayer_with_next-i18next.md +74 -299
- package/blog/hi/intlayer_with_next-intl.md +57 -239
- package/blog/hi/intlayer_with_react-i18next.md +69 -291
- package/blog/hi/intlayer_with_react-intl.md +65 -268
- package/blog/id/intlayer_with_i18next.md +126 -0
- package/blog/id/intlayer_with_next-i18next.md +142 -0
- package/blog/id/intlayer_with_next-intl.md +113 -0
- package/blog/id/intlayer_with_react-i18next.md +124 -0
- package/blog/id/intlayer_with_react-intl.md +122 -0
- package/blog/it/intlayer_with_i18next.md +67 -103
- package/blog/it/intlayer_with_next-i18next.md +71 -296
- package/blog/it/intlayer_with_next-intl.md +57 -338
- package/blog/it/intlayer_with_react-i18next.md +68 -290
- package/blog/it/intlayer_with_react-intl.md +62 -265
- package/blog/ja/intlayer_with_i18next.md +68 -103
- package/blog/ja/intlayer_with_next-i18next.md +85 -283
- package/blog/ja/intlayer_with_next-intl.md +58 -336
- package/blog/ja/intlayer_with_react-i18next.md +68 -290
- package/blog/ja/intlayer_with_react-intl.md +62 -264
- package/blog/ko/intlayer_with_i18next.md +80 -96
- package/blog/ko/intlayer_with_next-i18next.md +85 -287
- package/blog/ko/intlayer_with_next-intl.md +68 -327
- package/blog/ko/intlayer_with_react-i18next.md +68 -290
- package/blog/ko/intlayer_with_react-intl.md +64 -266
- package/blog/pl/intlayer_with_i18next.md +126 -0
- package/blog/pl/intlayer_with_next-i18next.md +142 -0
- package/blog/pl/intlayer_with_next-intl.md +111 -0
- package/blog/pl/intlayer_with_react-i18next.md +124 -0
- package/blog/pl/intlayer_with_react-intl.md +122 -0
- package/blog/pt/intlayer_with_i18next.md +67 -103
- package/blog/pt/intlayer_with_next-i18next.md +72 -293
- package/blog/pt/intlayer_with_next-intl.md +57 -256
- package/blog/pt/intlayer_with_react-i18next.md +104 -78
- package/blog/pt/intlayer_with_react-intl.md +62 -266
- package/blog/ru/intlayer_with_i18next.md +66 -104
- package/blog/ru/intlayer_with_next-i18next.md +71 -296
- package/blog/ru/intlayer_with_next-intl.md +58 -337
- package/blog/ru/intlayer_with_react-i18next.md +68 -290
- package/blog/ru/intlayer_with_react-intl.md +62 -265
- package/blog/tr/intlayer_with_i18next.md +71 -107
- package/blog/tr/intlayer_with_next-i18next.md +72 -297
- package/blog/tr/intlayer_with_next-intl.md +58 -339
- package/blog/tr/intlayer_with_react-i18next.md +69 -291
- package/blog/tr/intlayer_with_react-intl.md +63 -285
- package/blog/vi/intlayer_with_i18next.md +126 -0
- package/blog/vi/intlayer_with_next-i18next.md +142 -0
- package/blog/vi/intlayer_with_next-intl.md +111 -0
- package/blog/vi/intlayer_with_react-i18next.md +124 -0
- package/blog/vi/intlayer_with_react-intl.md +122 -0
- package/blog/zh/intlayer_with_i18next.md +67 -102
- package/blog/zh/intlayer_with_next-i18next.md +72 -296
- package/blog/zh/intlayer_with_next-intl.md +58 -336
- package/blog/zh/intlayer_with_react-i18next.md +68 -290
- package/blog/zh/intlayer_with_react-intl.md +63 -106
- package/dist/cjs/generated/blog.entry.cjs +13 -1
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +13 -1
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +13 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +13 -1
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +13 -2
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +13 -2
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +13 -2
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +13 -2
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/docs/ar/plugins/sync-json.md +244 -0
- package/docs/de/plugins/sync-json.md +244 -0
- package/docs/de/releases/v7.md +1 -18
- package/docs/en/CI_CD.md +1 -1
- package/docs/en/configuration.md +1 -1
- package/docs/en/formatters.md +1 -1
- package/docs/en/how_works_intlayer.md +1 -1
- package/docs/en/intlayer_CMS.md +1 -1
- package/docs/en/intlayer_cli.md +26 -1
- package/docs/en/intlayer_with_nextjs_14.md +3 -1
- package/docs/en/intlayer_with_nextjs_15.md +3 -1
- package/docs/en/intlayer_with_nextjs_16.md +3 -1
- package/docs/en/intlayer_with_nextjs_page_router.md +1 -1
- package/docs/en/intlayer_with_nuxt.md +1 -1
- package/docs/en/intlayer_with_react_native+expo.md +1 -1
- package/docs/en/intlayer_with_react_router_v7.md +1 -1
- package/docs/en/intlayer_with_tanstack.md +1 -1
- package/docs/en/intlayer_with_vite+preact.md +1 -1
- package/docs/en/intlayer_with_vite+react.md +1 -1
- package/docs/en/intlayer_with_vite+solid.md +1 -1
- package/docs/en/intlayer_with_vite+svelte.md +1 -1
- package/docs/en/intlayer_with_vite+vue.md +1 -1
- package/docs/en/plugins/sync-json.md +1 -1
- package/docs/en/roadmap.md +1 -1
- package/docs/en-GB/plugins/sync-json.md +244 -0
- package/docs/es/plugins/sync-json.md +244 -0
- package/docs/es/releases/v7.md +1 -18
- package/docs/fr/intlayer_with_nextjs_16.md +2 -51
- package/docs/fr/plugins/sync-json.md +244 -0
- package/docs/fr/releases/v7.md +1 -18
- package/docs/hi/intlayer_with_nextjs_16.md +3 -2
- package/docs/hi/plugins/sync-json.md +244 -0
- package/docs/id/plugins/sync-json.md +244 -0
- package/docs/id/releases/v7.md +1 -18
- package/docs/it/plugins/sync-json.md +244 -0
- package/docs/it/releases/v7.md +1 -18
- package/docs/ja/intlayer_with_nextjs_16.md +44 -205
- package/docs/ja/plugins/sync-json.md +244 -0
- package/docs/ja/releases/v7.md +1 -18
- package/docs/ko/plugins/sync-json.md +244 -0
- package/docs/ko/releases/v7.md +1 -18
- package/docs/pl/plugins/sync-json.md +244 -0
- package/docs/pt/intlayer_with_nextjs_16.md +1 -52
- package/docs/pt/plugins/sync-json.md +244 -0
- package/docs/ru/plugins/sync-json.md +244 -0
- package/docs/tr/plugins/sync-json.md +245 -0
- package/docs/vi/plugins/sync-json.md +244 -0
- package/docs/zh/plugins/sync-json.md +244 -0
- package/package.json +14 -14
- package/src/generated/blog.entry.ts +26 -3
- package/src/generated/docs.entry.ts +26 -3
- package/src/generated/frequentQuestions.entry.ts +26 -3
- package/src/generated/legal.entry.ts +26 -3
|
@@ -1,325 +1,123 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-01-02
|
|
3
|
-
updatedAt: 2025-
|
|
4
|
-
title: Intlayer
|
|
5
|
-
description: React
|
|
3
|
+
updatedAt: 2025-10-29
|
|
4
|
+
title: Intlayer를 사용하여 react-intl JSON 번역 자동화하는 방법
|
|
5
|
+
description: React 애플리케이션에서 향상된 국제화를 위해 Intlayer와 react-intl을 사용하여 JSON 번역을 자동화하세요.
|
|
6
6
|
keywords:
|
|
7
7
|
- react-intl
|
|
8
8
|
- Intlayer
|
|
9
9
|
- 국제화
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
10
|
+
- 블로그
|
|
11
|
+
- i18n
|
|
12
|
+
- 자바스크립트
|
|
13
|
+
- 리액트
|
|
14
|
+
- FormatJS
|
|
14
15
|
slugs:
|
|
15
16
|
- blog
|
|
16
17
|
- intlayer-with-react-intl
|
|
18
|
+
history:
|
|
19
|
+
- version: 7.0.0
|
|
20
|
+
date: 2025-10-29
|
|
21
|
+
changes: syncJSON 플러그인으로 변경
|
|
17
22
|
---
|
|
18
23
|
|
|
19
|
-
#
|
|
24
|
+
# Intlayer를 사용하여 react-intl JSON 번역 자동화하는 방법
|
|
20
25
|
|
|
21
|
-
|
|
26
|
+
## Intlayer란 무엇인가요?
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
**Intlayer**는 전통적인 i18n 솔루션의 한계를 극복하기 위해 설계된 혁신적이고 오픈 소스 국제화 라이브러리입니다. React 애플리케이션에서 콘텐츠 관리를 위한 현대적인 접근 방식을 제공합니다.
|
|
24
29
|
|
|
25
|
-
-
|
|
26
|
-
- **react-intl**은 로컬화된 문자열을 표시하기 위해 React 컴포넌트 및 훅(예: `<FormattedMessage>` 및 `useIntl()`)을 제공합니다.
|
|
30
|
+
react-intl과의 구체적인 비교는 저희 [react-i18next vs. react-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md) 블로그 게시물을 참고하세요.
|
|
27
31
|
|
|
28
|
-
|
|
32
|
+
## 왜 Intlayer와 react-intl을 함께 사용해야 할까요?
|
|
29
33
|
|
|
30
|
-
|
|
34
|
+
Intlayer는 훌륭한 독립형 i18n 솔루션을 제공하지만(자세한 내용은 저희 [React 통합 가이드](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_with_vite+react.md)를 참조), 다음과 같은 여러 이유로 react-intl과 함께 사용하고자 할 수 있습니다:
|
|
31
35
|
|
|
32
|
-
|
|
36
|
+
1. **기존 코드베이스**: 이미 구축된 react-intl 구현이 있으며 Intlayer의 향상된 개발자 경험으로 점진적으로 이전하고자 할 때.
|
|
37
|
+
2. **레거시 요구사항**: 프로젝트가 기존 react-intl 플러그인 또는 워크플로우와의 호환성을 필요로 할 때.
|
|
38
|
+
3. **팀 친숙도**: 팀이 react-intl에 익숙하지만 더 나은 콘텐츠 관리를 원할 때.
|
|
33
39
|
|
|
34
|
-
|
|
35
|
-
Intlayer 콘텐츠 선언 파일은 React 컴포넌트와 함께 존재할 수 있어, 컴포넌트가 이동하거나 제거될 경우 “고아” 번역을 방지합니다. 예를 들어:
|
|
40
|
+
**이를 위해 Intlayer는 react-intl의 어댑터로 구현되어 CLI 또는 CI/CD 파이프라인에서 JSON 번역 자동화, 번역 테스트 등 다양한 작업을 지원할 수 있습니다.**
|
|
36
41
|
|
|
37
|
-
|
|
38
|
-
.
|
|
39
|
-
└── src
|
|
40
|
-
└── components
|
|
41
|
-
└── MyComponent
|
|
42
|
-
├── index.content.ts # Intlayer 콘텐츠 선언
|
|
43
|
-
└── index.tsx # React 컴포넌트
|
|
44
|
-
```
|
|
42
|
+
이 가이드는 react-intl과의 호환성을 유지하면서 Intlayer의 우수한 콘텐츠 선언 시스템을 활용하는 방법을 보여줍니다.
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
각 콘텐츠 선언 파일은 컴포넌트에 필요한 모든 번역을 수집합니다. 이는 TypeScript 프로젝트에서 특히 유용합니다: 누락된 번역은 **컴파일 시간**에 포착될 수 있습니다.
|
|
44
|
+
## 목차
|
|
48
45
|
|
|
49
|
-
|
|
50
|
-
번역을 추가하거나 업데이트할 때마다 Intlayer는 메시지 JSON 파일을 재생성합니다. 그런 다음 이를 react-intl의 `<IntlProvider>`에 전달할 수 있습니다.
|
|
46
|
+
<TOC/>
|
|
51
47
|
|
|
52
|
-
|
|
48
|
+
## react-intl과 함께 Intlayer 설정 단계별 가이드
|
|
53
49
|
|
|
54
|
-
|
|
50
|
+
### 1단계: 의존성 설치
|
|
55
51
|
|
|
56
|
-
|
|
52
|
+
필요한 패키지를 설치하세요:
|
|
57
53
|
|
|
58
|
-
```bash
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
```bash packageManager="npm"
|
|
55
|
+
npm install intlayer @intlayer/sync-json-plugin
|
|
56
|
+
```
|
|
61
57
|
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
```bash packageManager="pnpm"
|
|
59
|
+
pnpm add intlayer @intlayer/sync-json-plugin
|
|
60
|
+
```
|
|
64
61
|
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
```bash packageManager="yarn"
|
|
63
|
+
yarn add intlayer @intlayer/sync-json-plugin
|
|
67
64
|
```
|
|
68
65
|
|
|
69
|
-
|
|
66
|
+
**패키지 설명:**
|
|
70
67
|
|
|
71
|
-
- **intlayer**:
|
|
72
|
-
-
|
|
68
|
+
- **intlayer**: 국제화 관리, 콘텐츠 선언 및 빌드를 위한 핵심 라이브러리
|
|
69
|
+
- **@intlayer/sync-json-plugin**: Intlayer 콘텐츠 선언을 react-intl 호환 JSON 형식으로 내보내는 플러그인
|
|
73
70
|
|
|
74
|
-
|
|
71
|
+
### 2단계: JSON을 래핑하기 위한 Intlayer 플러그인 구현
|
|
75
72
|
|
|
76
|
-
|
|
73
|
+
지원하는 로케일을 정의하기 위해 Intlayer 구성 파일을 만드세요:
|
|
77
74
|
|
|
78
|
-
|
|
75
|
+
**react-intl용 JSON 사전도 내보내고 싶다면**, `syncJSON` 플러그인을 추가하세요:
|
|
79
76
|
|
|
80
|
-
```typescript
|
|
77
|
+
```typescript fileName="intlayer.config.ts"
|
|
81
78
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
79
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
82
80
|
|
|
83
81
|
const config: IntlayerConfig = {
|
|
84
82
|
internationalization: {
|
|
85
|
-
// 원하는 만큼 로케일을 추가하세요
|
|
86
83
|
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
87
84
|
defaultLocale: Locales.ENGLISH,
|
|
88
85
|
},
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// Intlayer가 메시지 JSON 파일을 쓸 디렉토리
|
|
94
|
-
reactIntlMessagesDir: "./react-intl/messages",
|
|
95
|
-
},
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
export default config;
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
> **참고**: 다른 파일 확장자(`.mjs`, `.cjs`, `.js`)에 대한 사용 세부정보는 [Intlayer 문서](https://intlayer.org/ko/doc/concept/configuration)에서 확인하세요.
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## Intlayer 콘텐츠 선언 생성하기
|
|
106
|
-
|
|
107
|
-
Intlayer는 코드베이스를 스캔하여(기본적으로 `./src` 아래에서) `*.content.{ts,tsx,js,jsx,mjs,mjx,cjs,cjx,json}`와 일치하는 파일을 찾습니다.
|
|
108
|
-
다음은 **TypeScript** 예제입니다:
|
|
109
|
-
|
|
110
|
-
```typescript title="src/components/MyComponent/index.content.ts"
|
|
111
|
-
import { t, type Dictionary } from "intlayer";
|
|
112
|
-
|
|
113
|
-
const content = {
|
|
114
|
-
// "key"는 react-intl JSON 파일의 최상위 메시지 키가 됩니다.
|
|
115
|
-
key: "my-component",
|
|
116
|
-
|
|
117
|
-
content: {
|
|
118
|
-
// t()를 호출할 때마다 번역 가능한 필드를 선언합니다.
|
|
119
|
-
helloWorld: t({
|
|
120
|
-
en: "Hello World",
|
|
121
|
-
es: "Hola Mundo",
|
|
122
|
-
fr: "Bonjour le monde",
|
|
123
|
-
}),
|
|
124
|
-
description: t({
|
|
125
|
-
en: "This is a description",
|
|
126
|
-
fr: "Ceci est une description",
|
|
127
|
-
es: "Esta es una descripción",
|
|
86
|
+
plugins: [
|
|
87
|
+
syncJSON({
|
|
88
|
+
source: ({ key, locale }) => `./intl/messages/${locale}/${key}.json`,
|
|
128
89
|
}),
|
|
129
|
-
|
|
130
|
-
} satisfies Dictionary;
|
|
131
|
-
|
|
132
|
-
export default content;
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
JSON이나 다양한 JS 유형(`.cjs`, `.mjs`)을 선호하는 경우, 구조는 대부분 동일합니다 – [Intlayer 문서의 콘텐츠 선언](https://intlayer.org/ko/doc/concept/content)에서 확인하세요.
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## react-intl 메시지 빌드하기
|
|
140
|
-
|
|
141
|
-
**react-intl**에 대한 실제 메시지 JSON 파일을 생성하려면 다음을 실행합니다:
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
# npm으로
|
|
145
|
-
npx intlayer dictionaries build
|
|
146
|
-
|
|
147
|
-
# yarn으로
|
|
148
|
-
yarn intlayer build
|
|
149
|
-
|
|
150
|
-
# pnpm으로
|
|
151
|
-
pnpm intlayer build
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
이 명령은 모든 `*.content.*` 파일을 스캔하고, 이를 컴파일하며, 결과를 **`intlayer.config.ts`**에서 지정한 디렉토리(이번 예제에서는 `./react-intl/messages`)에 씁니다.
|
|
155
|
-
일반적인 출력 예시는 다음과 같을 수 있습니다:
|
|
156
|
-
|
|
157
|
-
```bash
|
|
158
|
-
.
|
|
159
|
-
└── react-intl
|
|
160
|
-
└── messages
|
|
161
|
-
├── en.json
|
|
162
|
-
├── fr.json
|
|
163
|
-
└── es.json
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
각 파일은 **최상위 키**가 각 **`content.key`**에 해당하는 JSON 객체입니다. **하위 키**(예: `helloWorld`)는 해당 콘텐츠 항목 내에 선언된 번역을 반영합니다.
|
|
167
|
-
|
|
168
|
-
예를 들어, **en.json**은 다음과 같을 수 있습니다:
|
|
169
|
-
|
|
170
|
-
```json fileName="react-intl/messages/en/my-component.json"
|
|
171
|
-
{
|
|
172
|
-
"helloWorld": "Hello World",
|
|
173
|
-
"description": "This is a description"
|
|
174
|
-
}
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## Your React App에서 react-intl 초기화하기
|
|
180
|
-
|
|
181
|
-
### 1. 생성된 메시지 로드하기
|
|
182
|
-
|
|
183
|
-
앱의 루트 컴포넌트를 구성하는 곳(예: `src/main.tsx` 또는 `src/index.tsx`)에서 다음을 수행해야 합니다:
|
|
184
|
-
|
|
185
|
-
1. 생성된 메시지 파일을 **가져옵니다** (정적으로 또는 동적으로).
|
|
186
|
-
2. 이들을 `react-intl`의 `<IntlProvider>`에 **제공합니다**.
|
|
187
|
-
|
|
188
|
-
간단한 접근법은 정적으로 가져오는 것입니다:
|
|
189
|
-
|
|
190
|
-
```typescript title="src/index.tsx"
|
|
191
|
-
import React from "react";
|
|
192
|
-
import ReactDOM from "react-dom/client";
|
|
193
|
-
import { IntlProvider } from "react-intl";
|
|
194
|
-
import App from "./App";
|
|
195
|
-
|
|
196
|
-
// 빌드 출력에서 JSON 파일을 가져옵니다.
|
|
197
|
-
// 또는 사용자가 선택한 로케일에 따라 동적으로 가져올 수 있습니다.
|
|
198
|
-
import en from "../react-intl/messages/en.json";
|
|
199
|
-
import fr from "../react-intl/messages/fr.json";
|
|
200
|
-
import es from "../react-intl/messages/es.json";
|
|
201
|
-
|
|
202
|
-
// 사용자의 언어를 감지하는 메커니즘이 있다면, 여기서 설정하세요.
|
|
203
|
-
// 간단하게 영어를 선택해 보겠습니다.
|
|
204
|
-
const locale = "en";
|
|
205
|
-
|
|
206
|
-
// 메시지를 객체에 수집합니다 (또는 동적으로 선택할 수 있습니다)
|
|
207
|
-
const messagesRecord: Record<string, Record<string, any>> = {
|
|
208
|
-
en,
|
|
209
|
-
fr,
|
|
210
|
-
es,
|
|
90
|
+
],
|
|
211
91
|
};
|
|
212
92
|
|
|
213
|
-
|
|
214
|
-
<React.StrictMode>
|
|
215
|
-
<IntlProvider locale={locale} messages={messagesRecord[locale]}>
|
|
216
|
-
<App />
|
|
217
|
-
</IntlProvider>
|
|
218
|
-
</React.StrictMode>
|
|
219
|
-
);
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
> **팁**: 실제 프로젝트에서는:
|
|
223
|
-
>
|
|
224
|
-
> - 런타임에 JSON 메시지를 동적으로 로드할 수 있습니다.
|
|
225
|
-
> - 환경 기반, 브라우저 기반 또는 사용자 계정 기반의 로케일 감지를 사용할 수 있습니다.
|
|
226
|
-
|
|
227
|
-
### 2. `<FormattedMessage>` 또는 `useIntl()` 사용하기
|
|
228
|
-
|
|
229
|
-
메시지가 `<IntlProvider>`에 로드되면, 자식 컴포넌트는 react-intl을 사용하여 로컬화된 문자열에 접근할 수 있습니다. 두 가지 주요 접근 방식이 있습니다:
|
|
230
|
-
|
|
231
|
-
- **`<FormattedMessage>`** 컴포넌트
|
|
232
|
-
- **`useIntl()`** 훅
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
## React 컴포넌트에서 번역 사용하기
|
|
237
|
-
|
|
238
|
-
### 접근법 A: `<FormattedMessage>`
|
|
239
|
-
|
|
240
|
-
빠른 인라인 사용을 위해:
|
|
241
|
-
|
|
242
|
-
```tsx title="src/components/MyComponent/index.tsx"
|
|
243
|
-
import React from "react";
|
|
244
|
-
import { FormattedMessage } from "react-intl";
|
|
245
|
-
|
|
246
|
-
export default function MyComponent() {
|
|
247
|
-
return (
|
|
248
|
-
<div>
|
|
249
|
-
<h1>
|
|
250
|
-
{/* “my-component.helloWorld”은 en.json, fr.json 등에서 키를 참조합니다. */}
|
|
251
|
-
<FormattedMessage id="my-component.helloWorld" />
|
|
252
|
-
</h1>
|
|
253
|
-
|
|
254
|
-
<p>
|
|
255
|
-
<FormattedMessage id="my-component.description" />
|
|
256
|
-
</p>
|
|
257
|
-
</div>
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
> `<FormattedMessage>`의 **`id`** 속성은 **최상위 키**(`my-component`)와 모든 하위 키(`helloWorld`)를 일치시켜야 합니다.
|
|
263
|
-
|
|
264
|
-
### 접근법 B: `useIntl()`
|
|
265
|
-
|
|
266
|
-
더 동적인 사용을 위해:
|
|
267
|
-
|
|
268
|
-
```tsx title="src/components/MyComponent/index.tsx"
|
|
269
|
-
import React from "react";
|
|
270
|
-
import { useIntl } from "react-intl";
|
|
271
|
-
|
|
272
|
-
export default function MyComponent() {
|
|
273
|
-
const intl = useIntl();
|
|
274
|
-
|
|
275
|
-
return (
|
|
276
|
-
<div>
|
|
277
|
-
<h1>{intl.formatMessage({ id: "my-component.helloWorld" })}</h1>
|
|
278
|
-
<p>{intl.formatMessage({ id: "my-component.description" })}</p>
|
|
279
|
-
</div>
|
|
280
|
-
);
|
|
281
|
-
}
|
|
93
|
+
export default config;
|
|
282
94
|
```
|
|
283
95
|
|
|
284
|
-
|
|
96
|
+
`syncJSON` 플러그인은 JSON을 자동으로 래핑합니다. 콘텐츠 구조를 변경하지 않고 JSON 파일을 읽고 씁니다.
|
|
285
97
|
|
|
286
|
-
|
|
98
|
+
JSON과 intlayer 콘텐츠 선언 파일(`.content` 파일)을 공존시키고 싶다면, Intlayer는 다음과 같이 처리합니다:
|
|
287
99
|
|
|
288
|
-
|
|
100
|
+
1. JSON 파일과 콘텐츠 선언 파일을 모두 불러와 intlayer 사전(dictionary)으로 변환합니다.
|
|
289
101
|
|
|
290
|
-
|
|
291
|
-
2. `intlayer build`를 다시 실행하여 `./react-intl/messages` 아래에 JSON 파일을 재생성합니다.
|
|
292
|
-
3. React(및 react-intl)는 애플리케이션을 다음에 빌드하거나 다시 로드할 때 업데이트를 감지합니다.
|
|
102
|
+
2. JSON과 콘텐츠 선언 파일 간에 충돌이 있을 경우, Intlayer는 모든 사전을 병합하는 과정을 진행합니다. 이는 플러그인의 우선순위와 콘텐츠 선언 파일의 우선순위에 따라 결정되며(모두 구성 가능함).
|
|
293
103
|
|
|
294
|
-
|
|
104
|
+
CLI를 사용하여 JSON을 번역하거나 CMS를 통해 변경 사항이 발생하면, Intlayer는 새로운 번역으로 JSON 파일을 업데이트합니다.
|
|
295
105
|
|
|
296
|
-
|
|
106
|
+
`syncJSON` 플러그인에 대한 자세한 내용은 [syncJSON 플러그인 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/plugins/sync-json.md)를 참조하세요.
|
|
297
107
|
|
|
298
|
-
|
|
108
|
+
## Git 구성
|
|
299
109
|
|
|
300
|
-
|
|
110
|
+
자동 생성된 Intlayer 파일은 무시하는 것이 권장됩니다:
|
|
301
111
|
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
// ...
|
|
306
|
-
},
|
|
307
|
-
"include": ["src", "types"],
|
|
308
|
-
}
|
|
112
|
+
```plaintext fileName=".gitignore"
|
|
113
|
+
# Intlayer에서 생성된 파일 무시
|
|
114
|
+
.intlayer
|
|
309
115
|
```
|
|
310
116
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
---
|
|
314
|
-
|
|
315
|
-
## Git 구성
|
|
117
|
+
이 파일들은 빌드 과정 중에 다시 생성될 수 있으므로 버전 관리에 커밋할 필요가 없습니다.
|
|
316
118
|
|
|
317
|
-
|
|
119
|
+
### VS 코드 확장
|
|
318
120
|
|
|
319
|
-
|
|
320
|
-
# intlayer 빌드 아티팩트 무시
|
|
321
|
-
.intlayer
|
|
322
|
-
react-intl
|
|
323
|
-
```
|
|
121
|
+
개발자 경험을 향상시키기 위해 공식 **Intlayer VS 코드 확장**을 설치하세요:
|
|
324
122
|
|
|
325
|
-
|
|
123
|
+
[VS 코드 마켓플레이스에서 설치하기](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-12-24
|
|
3
|
+
updatedAt: 2025-10-29
|
|
4
|
+
title: Jak zautomatyzować tłumaczenia JSON i18next za pomocą Intlayer
|
|
5
|
+
description: Automatyzuj tłumaczenia JSON za pomocą Intlayer i i18next dla lepszej internacjonalizacji w aplikacjach JavaScript.
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- i18next
|
|
9
|
+
- Internacjonalizacja
|
|
10
|
+
- i18n
|
|
11
|
+
- Lokalizacja
|
|
12
|
+
- Tłumaczenie
|
|
13
|
+
- React
|
|
14
|
+
- Next.js
|
|
15
|
+
- JavaScript
|
|
16
|
+
- TypeScript
|
|
17
|
+
- Migracja
|
|
18
|
+
- Integracja
|
|
19
|
+
slugs:
|
|
20
|
+
- blog
|
|
21
|
+
- intlayer-with-i18next
|
|
22
|
+
history:
|
|
23
|
+
- version: 7.0.0
|
|
24
|
+
date: 2025-10-29
|
|
25
|
+
changes: Zmiana na wtyczkę syncJSON
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Jak zautomatyzować tłumaczenia JSON i18next za pomocą Intlayer
|
|
29
|
+
|
|
30
|
+
## Czym jest Intlayer?
|
|
31
|
+
|
|
32
|
+
**Intlayer** to innowacyjna, otwartoźródłowa biblioteka do internacjonalizacji, zaprojektowana w celu rozwiązania niedoskonałości tradycyjnych rozwiązań i18n. Oferuje nowoczesne podejście do zarządzania treścią w aplikacjach JavaScript.
|
|
33
|
+
|
|
34
|
+
Zobacz konkretne porównanie z i18next w naszym wpisie na blogu [next-i18next vs. next-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md).
|
|
35
|
+
|
|
36
|
+
## Dlaczego łączyć Intlayer z i18next?
|
|
37
|
+
|
|
38
|
+
Chociaż Intlayer zapewnia doskonałe, samodzielne rozwiązanie i18n (zobacz nasz [przewodnik integracji z Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_with_nextjs_16.md)), możesz chcieć połączyć je z i18next z kilku powodów:
|
|
39
|
+
|
|
40
|
+
1. **Istniejąca baza kodu**: Masz już wdrożoną implementację i18next i chcesz stopniowo przejść na ulepszone doświadczenie deweloperskie Intlayer.
|
|
41
|
+
2. **Wymagania dotyczące kompatybilności wstecznej**: Twój projekt wymaga zgodności z istniejącymi wtyczkami lub procesami i18next.
|
|
42
|
+
3. **Znajomość zespołu**: Twój zespół dobrze zna i18next, ale chce lepszego zarządzania treścią.
|
|
43
|
+
|
|
44
|
+
**W tym celu Intlayer może być zaimplementowany jako adapter dla i18next, aby pomóc w automatyzacji tłumaczeń JSON w CLI lub pipeline'ach CI/CD, testowaniu tłumaczeń i nie tylko.**
|
|
45
|
+
|
|
46
|
+
Ten przewodnik pokazuje, jak wykorzystać zaawansowany system deklaracji treści Intlayer, jednocześnie zachowując kompatybilność z i18next.
|
|
47
|
+
|
|
48
|
+
## Spis treści
|
|
49
|
+
|
|
50
|
+
<TOC/>
|
|
51
|
+
|
|
52
|
+
## Przewodnik krok po kroku, jak skonfigurować Intlayer z i18next
|
|
53
|
+
|
|
54
|
+
### Krok 1: Zainstaluj zależności
|
|
55
|
+
|
|
56
|
+
Zainstaluj niezbędne pakiety:
|
|
57
|
+
|
|
58
|
+
```bash packageManager="npm"
|
|
59
|
+
npm install intlayer @intlayer/sync-json-plugin
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
```bash packageManager="pnpm"
|
|
63
|
+
pnpm add intlayer @intlayer/sync-json-plugin
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```bash packageManager="yarn"
|
|
67
|
+
yarn add intlayer @intlayer/sync-json-plugin
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Opis pakietów:**
|
|
71
|
+
|
|
72
|
+
- **intlayer**: Podstawowa biblioteka do zarządzania internacjonalizacją, deklaracji treści i budowania
|
|
73
|
+
- **@intlayer/sync-json-plugin**: Wtyczka do eksportowania deklaracji treści Intlayer do formatu JSON kompatybilnego z i18next
|
|
74
|
+
|
|
75
|
+
### Krok 2: Implementacja wtyczki Intlayer do opakowania JSON
|
|
76
|
+
|
|
77
|
+
Utwórz plik konfiguracyjny Intlayer, aby zdefiniować obsługiwane lokalizacje:
|
|
78
|
+
|
|
79
|
+
**Jeśli chcesz również eksportować słowniki JSON dla i18next**, dodaj wtyczkę `syncJSON`:
|
|
80
|
+
|
|
81
|
+
```typescript fileName="intlayer.config.ts"
|
|
82
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
83
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
84
|
+
|
|
85
|
+
const config: IntlayerConfig = {
|
|
86
|
+
internationalization: {
|
|
87
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
88
|
+
defaultLocale: Locales.ENGLISH,
|
|
89
|
+
},
|
|
90
|
+
plugins: [
|
|
91
|
+
syncJSON({
|
|
92
|
+
source: ({ key, locale }) => `./intl/messages/${locale}/${key}.json`,
|
|
93
|
+
}),
|
|
94
|
+
],
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export default config;
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Wtyczka `syncJSON` automatycznie opakuje JSON. Będzie odczytywać i zapisywać pliki JSON bez zmiany architektury zawartości.
|
|
101
|
+
|
|
102
|
+
Jeśli chcesz, aby JSON współistniał z plikami deklaracji treści Intlayer (`.content`), Intlayer postąpi w następujący sposób:
|
|
103
|
+
|
|
104
|
+
1. załaduje zarówno pliki JSON, jak i pliki deklaracji treści, a następnie przekształci je w słownik Intlayer.
|
|
105
|
+
2. jeśli wystąpią konflikty między plikami JSON a plikami deklaracji treści, Intlayer przeprowadzi scalanie wszystkich słowników. W zależności od priorytetu wtyczek oraz pliku deklaracji treści (wszystko jest konfigurowalne).
|
|
106
|
+
|
|
107
|
+
Jeśli zmiany zostaną wprowadzone za pomocą CLI do tłumaczenia JSON lub za pomocą CMS, Intlayer zaktualizuje plik JSON o nowe tłumaczenia.
|
|
108
|
+
|
|
109
|
+
## Konfiguracja Git
|
|
110
|
+
|
|
111
|
+
Zaleca się ignorowanie automatycznie generowanych plików Intlayer:
|
|
112
|
+
|
|
113
|
+
```plaintext fileName=".gitignore"
|
|
114
|
+
# Ignoruj pliki generowane przez Intlayer
|
|
115
|
+
.intlayer
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Te pliki mogą być ponownie wygenerowane podczas procesu budowania i nie muszą być zatwierdzane do kontroli wersji.
|
|
119
|
+
|
|
120
|
+
### Rozszerzenie VS Code
|
|
121
|
+
|
|
122
|
+
Dla lepszego doświadczenia deweloperskiego zainstaluj oficjalne **rozszerzenie Intlayer dla VS Code**:
|
|
123
|
+
|
|
124
|
+
[Zainstaluj z Marketplace VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
125
|
+
|
|
126
|
+
[Zainstaluj z VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-10-29
|
|
4
|
+
title: Intlayer i next-i18next
|
|
5
|
+
description: Integracja Intlayer z next-i18next dla kompleksowego rozwiązania internacjonalizacji w Next.js
|
|
6
|
+
keywords:
|
|
7
|
+
- i18next
|
|
8
|
+
- next-i18next
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Internacjonalizacja
|
|
11
|
+
- Blog
|
|
12
|
+
- Next.js
|
|
13
|
+
- JavaScript
|
|
14
|
+
- React
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- intlayer-with-next-i18next
|
|
18
|
+
history:
|
|
19
|
+
- version: 7.0.0
|
|
20
|
+
date: 2025-10-29
|
|
21
|
+
changes: Zmiana na wtyczkę syncJSON i kompleksowy przepis
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Internacjonalizacja (i18n) w Next.js z next-i18next i Intlayer
|
|
25
|
+
|
|
26
|
+
## Spis treści
|
|
27
|
+
|
|
28
|
+
<TOC/>
|
|
29
|
+
|
|
30
|
+
## Czym jest next-i18next?
|
|
31
|
+
|
|
32
|
+
**next-i18next** jest jednym z najpopularniejszych frameworków do internacjonalizacji (i18n) dla aplikacji Next.js. Zbudowany na bazie potężnego ekosystemu **i18next**, zapewnia kompleksowe rozwiązanie do zarządzania tłumaczeniami, lokalizacją oraz przełączaniem języków w projektach Next.js.
|
|
33
|
+
|
|
34
|
+
Jednak next-i18next wiąże się z pewnymi wyzwaniami:
|
|
35
|
+
|
|
36
|
+
- **Złożona konfiguracja**: Konfiguracja next-i18next wymaga wielu plików konfiguracyjnych oraz starannego ustawienia instancji i18n po stronie serwera i klienta.
|
|
37
|
+
- **Rozproszone tłumaczenia**: Pliki tłumaczeń zazwyczaj przechowywane są w oddzielnych katalogach od komponentów, co utrudnia utrzymanie spójności.
|
|
38
|
+
- **Ręczne zarządzanie przestrzeniami nazw**: Programiści muszą ręcznie zarządzać przestrzeniami nazw i zapewnić prawidłowe ładowanie zasobów tłumaczeń.
|
|
39
|
+
- **Ograniczone bezpieczeństwo typów**: Wsparcie dla TypeScript wymaga dodatkowej konfiguracji i nie zapewnia automatycznego generowania typów dla tłumaczeń.
|
|
40
|
+
|
|
41
|
+
## Czym jest Intlayer?
|
|
42
|
+
|
|
43
|
+
**Intlayer** to innowacyjna, otwartoźródłowa biblioteka do internacjonalizacji, zaprojektowana w celu rozwiązania niedoskonałości tradycyjnych rozwiązań i18n. Oferuje nowoczesne podejście do zarządzania treścią w aplikacjach Next.js.
|
|
44
|
+
|
|
45
|
+
Zobacz konkretne porównanie z next-intl w naszym wpisie na blogu [next-i18next vs. next-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md).
|
|
46
|
+
|
|
47
|
+
## Dlaczego łączyć Intlayer z next-i18next?
|
|
48
|
+
|
|
49
|
+
Chociaż Intlayer zapewnia doskonałe, samodzielne rozwiązanie i18n (zobacz nasz [przewodnik integracji z Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/intlayer_with_nextjs_16.md)), możesz chcieć połączyć go z next-i18next z kilku powodów:
|
|
50
|
+
|
|
51
|
+
1. **Istniejąca baza kodu**: Masz już wdrożoną implementację next-i18next i chcesz stopniowo przechodzić na ulepszone doświadczenie deweloperskie Intlayer.
|
|
52
|
+
2. **Wymagania dotyczące kompatybilności wstecznej**: Twój projekt wymaga zgodności z istniejącymi wtyczkami lub procesami i18next.
|
|
53
|
+
3. **Znajomość zespołu**: Twój zespół jest zaznajomiony z next-i18next, ale chce lepszego zarządzania treścią.
|
|
54
|
+
|
|
55
|
+
**W tym celu Intlayer może być zaimplementowany jako adapter dla next-i18next, aby pomóc w automatyzacji tłumaczeń JSON w CLI lub pipeline'ach CI/CD, testowaniu tłumaczeń i nie tylko.**
|
|
56
|
+
|
|
57
|
+
Ten przewodnik pokazuje, jak wykorzystać zaawansowany system deklaracji treści Intlayer, zachowując jednocześnie kompatybilność z next-i18next.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Przewodnik krok po kroku, jak skonfigurować Intlayer z next-i18next
|
|
62
|
+
|
|
63
|
+
### Krok 1: Instalacja zależności
|
|
64
|
+
|
|
65
|
+
Zainstaluj niezbędne pakiety, używając preferowanego menedżera pakietów:
|
|
66
|
+
|
|
67
|
+
```bash packageManager="npm"
|
|
68
|
+
npm install intlayer @intlayer/sync-json-plugin
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```bash packageManager="pnpm"
|
|
72
|
+
pnpm add intlayer @intlayer/sync-json-plugin
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
```bash packageManager="yarn"
|
|
76
|
+
yarn add intlayer @intlayer/sync-json-plugin
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Wyjaśnienie pakietów:**
|
|
80
|
+
|
|
81
|
+
- **intlayer**: Podstawowa biblioteka do deklaracji i zarządzania treścią
|
|
82
|
+
- **next-intlayer**: Warstwa integracyjna Next.js z wtyczkami build
|
|
83
|
+
- **i18next**: Podstawowy framework i18n
|
|
84
|
+
- **next-i18next**: Nakładka Next.js dla i18next
|
|
85
|
+
- **i18next-resources-to-backend**: Dynamiczne ładowanie zasobów dla i18next
|
|
86
|
+
- **@intlayer/sync-json-plugin**: Wtyczka do synchronizacji deklaracji treści Intlayer z formatem JSON i18next
|
|
87
|
+
|
|
88
|
+
### Krok 2: Implementacja wtyczki Intlayer do opakowania JSON
|
|
89
|
+
|
|
90
|
+
Utwórz plik konfiguracyjny Intlayer, aby zdefiniować obsługiwane lokalizacje:
|
|
91
|
+
|
|
92
|
+
**Jeśli chcesz również eksportować słowniki JSON dla i18next**, dodaj wtyczkę `syncJSON`:
|
|
93
|
+
|
|
94
|
+
```typescript fileName="intlayer.config.ts"
|
|
95
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
96
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
97
|
+
|
|
98
|
+
const config: IntlayerConfig = {
|
|
99
|
+
internationalization: {
|
|
100
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
101
|
+
defaultLocale: Locales.ENGLISH,
|
|
102
|
+
},
|
|
103
|
+
plugins: [
|
|
104
|
+
syncJSON({
|
|
105
|
+
source: ({ key, locale }) => `./messages/${locale}/${key}.json`,
|
|
106
|
+
}),
|
|
107
|
+
],
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export default config;
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Wtyczka `syncJSON` automatycznie opakuje JSON. Będzie odczytywać i zapisywać pliki JSON bez zmiany architektury zawartości.
|
|
114
|
+
|
|
115
|
+
Jeśli chcesz, aby JSON współistniał z plikami deklaracji zawartości intlayer (`.content`), Intlayer postąpi w następujący sposób:
|
|
116
|
+
|
|
117
|
+
1. załaduje zarówno pliki JSON, jak i pliki deklaracji zawartości, a następnie przekształci je w słownik intlayer.
|
|
118
|
+
2. jeśli wystąpią konflikty między plikami JSON a plikami deklaracji zawartości, Intlayer przeprowadzi scalanie wszystkich słowników. W zależności od priorytetu wtyczek oraz pliku deklaracji zawartości (wszystko jest konfigurowalne).
|
|
119
|
+
|
|
120
|
+
Jeśli zmiany zostaną wprowadzone za pomocą CLI do tłumaczenia JSON lub za pomocą CMS, Intlayer zaktualizuje plik JSON nowymi tłumaczeniami.
|
|
121
|
+
|
|
122
|
+
Aby zobaczyć więcej szczegółów na temat wtyczki `syncJSON`, prosimy zapoznać się z [dokumentacją wtyczki syncJSON](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/plugins/sync-json.md).
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Konfiguracja Git
|
|
127
|
+
|
|
128
|
+
Wyklucz generowane pliki z kontroli wersji:
|
|
129
|
+
|
|
130
|
+
```plaintext fileName=".gitignore"
|
|
131
|
+
# Ignoruj pliki generowane przez Intlayer
|
|
132
|
+
.intlayer
|
|
133
|
+
intl
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Te pliki są automatycznie generowane podczas procesu budowania i nie muszą być zatwierdzane do Twojego repozytorium.
|
|
137
|
+
|
|
138
|
+
### Rozszerzenie VS Code
|
|
139
|
+
|
|
140
|
+
Dla lepszego doświadczenia deweloperskiego zainstaluj oficjalne **Rozszerzenie Intlayer dla VS Code**:
|
|
141
|
+
|
|
142
|
+
[Zainstaluj z VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|