@intlayer/docs 7.0.5 → 7.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/intlayer_with_i18next.md +72 -19
- package/blog/ar/intlayer_with_next-i18next.md +61 -36
- package/blog/ar/intlayer_with_next-intl.md +61 -13
- package/blog/ar/intlayer_with_react-i18next.md +67 -18
- package/blog/ar/intlayer_with_react-intl.md +66 -13
- package/blog/ar/intlayer_with_vue-i18n.md +180 -0
- package/blog/de/intlayer_with_i18next.md +61 -26
- package/blog/de/intlayer_with_next-i18next.md +66 -17
- package/blog/de/intlayer_with_next-intl.md +62 -13
- package/blog/de/intlayer_with_react-i18next.md +66 -17
- package/blog/de/intlayer_with_react-intl.md +66 -14
- package/blog/de/intlayer_with_vue-i18n.md +178 -0
- package/blog/en/intlayer_with_i18next.md +53 -2
- package/blog/en/intlayer_with_next-i18next.md +52 -16
- package/blog/en/intlayer_with_next-intl.md +49 -0
- package/blog/en/intlayer_with_react-i18next.md +50 -1
- package/blog/en/intlayer_with_react-intl.md +53 -0
- package/blog/en/intlayer_with_vue-i18n.md +178 -0
- package/blog/en-GB/intlayer_with_i18next.md +58 -7
- package/blog/en-GB/intlayer_with_next-i18next.md +55 -9
- package/blog/en-GB/intlayer_with_next-intl.md +55 -6
- package/blog/en-GB/intlayer_with_react-i18next.md +55 -6
- package/blog/en-GB/intlayer_with_react-intl.md +56 -3
- package/blog/en-GB/intlayer_with_vue-i18n.md +180 -0
- package/blog/es/intlayer_with_i18next.md +69 -18
- package/blog/es/intlayer_with_next-i18next.md +70 -24
- package/blog/es/intlayer_with_next-intl.md +64 -13
- package/blog/es/intlayer_with_react-i18next.md +61 -12
- package/blog/es/intlayer_with_react-intl.md +65 -12
- package/blog/es/intlayer_with_vue-i18n.md +178 -0
- package/blog/fr/intlayer_with_i18next.md +77 -16
- package/blog/fr/intlayer_with_next-i18next.md +55 -31
- package/blog/fr/intlayer_with_next-intl.md +57 -7
- package/blog/fr/intlayer_with_react-i18next.md +64 -7
- package/blog/fr/intlayer_with_react-intl.md +63 -10
- package/blog/fr/intlayer_with_vue-i18n.md +178 -0
- package/blog/hi/intlayer_with_i18next.md +67 -16
- package/blog/hi/intlayer_with_next-i18next.md +69 -23
- package/blog/hi/intlayer_with_next-intl.md +61 -8
- package/blog/hi/intlayer_with_react-i18next.md +63 -14
- package/blog/hi/intlayer_with_react-intl.md +66 -13
- package/blog/hi/intlayer_with_vue-i18n.md +180 -0
- package/blog/id/intlayer_with_i18next.md +65 -14
- package/blog/id/intlayer_with_next-i18next.md +58 -12
- package/blog/id/intlayer_with_next-intl.md +60 -11
- package/blog/id/intlayer_with_react-i18next.md +59 -10
- package/blog/id/intlayer_with_react-intl.md +66 -13
- package/blog/id/intlayer_with_vue-i18n.md +178 -0
- package/blog/it/intlayer_with_i18next.md +70 -19
- package/blog/it/intlayer_with_next-i18next.md +68 -22
- package/blog/it/intlayer_with_next-intl.md +62 -12
- package/blog/it/intlayer_with_react-i18next.md +65 -16
- package/blog/it/intlayer_with_react-intl.md +67 -14
- package/blog/it/intlayer_with_vue-i18n.md +178 -0
- package/blog/ja/intlayer_with_i18next.md +74 -24
- package/blog/ja/intlayer_with_next-i18next.md +60 -37
- package/blog/ja/intlayer_with_next-intl.md +63 -15
- package/blog/ja/intlayer_with_react-i18next.md +70 -21
- package/blog/ja/intlayer_with_react-intl.md +73 -21
- package/blog/ja/intlayer_with_vue-i18n.md +180 -0
- package/blog/ko/intlayer_with_i18next.md +60 -29
- package/blog/ko/intlayer_with_next-i18next.md +59 -32
- package/blog/ko/intlayer_with_next-intl.md +52 -23
- package/blog/ko/intlayer_with_react-i18next.md +65 -16
- package/blog/ko/intlayer_with_react-intl.md +74 -22
- package/blog/ko/intlayer_with_vue-i18n.md +180 -0
- package/blog/pl/intlayer_with_i18next.md +63 -12
- package/blog/pl/intlayer_with_next-i18next.md +74 -17
- package/blog/pl/intlayer_with_next-intl.md +59 -8
- package/blog/pl/intlayer_with_react-i18next.md +59 -10
- package/blog/pl/intlayer_with_react-intl.md +65 -12
- package/blog/pl/intlayer_with_vue-i18n.md +180 -0
- package/blog/pt/intlayer_with_i18next.md +67 -16
- package/blog/pt/intlayer_with_next-i18next.md +65 -19
- package/blog/pt/intlayer_with_next-intl.md +62 -12
- package/blog/pt/intlayer_with_react-i18next.md +67 -18
- package/blog/pt/intlayer_with_react-intl.md +62 -10
- package/blog/pt/intlayer_with_vue-i18n.md +178 -0
- package/blog/ru/intlayer_with_i18next.md +68 -15
- package/blog/ru/intlayer_with_next-i18next.md +71 -25
- package/blog/ru/intlayer_with_next-intl.md +56 -7
- package/blog/ru/intlayer_with_react-i18next.md +65 -16
- package/blog/ru/intlayer_with_react-intl.md +69 -16
- package/blog/ru/intlayer_with_vue-i18n.md +180 -0
- package/blog/tr/intlayer_with_i18next.md +67 -16
- package/blog/tr/intlayer_with_next-i18next.md +78 -21
- package/blog/tr/intlayer_with_next-intl.md +69 -18
- package/blog/tr/intlayer_with_react-i18next.md +65 -16
- package/blog/tr/intlayer_with_react-intl.md +71 -19
- package/blog/tr/intlayer_with_vue-i18n.md +180 -0
- package/blog/vi/intlayer_with_i18next.md +64 -13
- package/blog/vi/intlayer_with_next-i18next.md +72 -26
- package/blog/vi/intlayer_with_next-intl.md +62 -11
- package/blog/vi/intlayer_with_react-i18next.md +66 -17
- package/blog/vi/intlayer_with_react-intl.md +70 -17
- package/blog/vi/intlayer_with_vue-i18n.md +180 -0
- package/blog/zh/intlayer_with_i18next.md +67 -17
- package/blog/zh/intlayer_with_next-i18next.md +67 -22
- package/blog/zh/intlayer_with_next-intl.md +61 -13
- package/blog/zh/intlayer_with_react-i18next.md +67 -18
- package/blog/zh/intlayer_with_react-intl.md +69 -17
- package/blog/zh/intlayer_with_vue-i18n.md +180 -0
- package/dist/cjs/generated/blog.entry.cjs +19 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +19 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_with_nextjs_15.md +36 -9
- package/docs/ar/intlayer_with_nextjs_16.md +36 -9
- package/docs/de/intlayer_with_nextjs_15.md +36 -9
- package/docs/de/intlayer_with_nextjs_16.md +24 -6
- package/docs/en/intlayer_with_nextjs_14.md +37 -9
- package/docs/en/intlayer_with_nextjs_15.md +40 -10
- package/docs/en/intlayer_with_nextjs_16.md +40 -10
- package/docs/en/plugins/sync-json.md +152 -55
- package/docs/en/releases/v7.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_15.md +36 -9
- package/docs/en-GB/intlayer_with_nextjs_16.md +36 -9
- package/docs/en-GB/releases/v7.md +1 -1
- package/docs/es/intlayer_with_nextjs_15.md +36 -9
- package/docs/es/intlayer_with_nextjs_16.md +36 -9
- package/docs/fr/intlayer_with_nextjs_15.md +36 -9
- package/docs/fr/intlayer_with_nextjs_16.md +37 -24
- package/docs/hi/intlayer_with_nextjs_15.md +36 -9
- package/docs/hi/intlayer_with_nextjs_16.md +36 -9
- package/docs/id/intlayer_with_nextjs_16.md +36 -9
- package/docs/it/intlayer_with_nextjs_15.md +36 -9
- package/docs/it/intlayer_with_nextjs_16.md +36 -9
- package/docs/ja/intlayer_with_nextjs_15.md +36 -9
- package/docs/ja/intlayer_with_nextjs_16.md +36 -9
- package/docs/ko/intlayer_with_nextjs_15.md +36 -9
- package/docs/ko/intlayer_with_nextjs_16.md +36 -9
- package/docs/pl/intlayer_with_nextjs_16.md +36 -9
- package/docs/pt/intlayer_with_nextjs_15.md +36 -9
- package/docs/pt/intlayer_with_nextjs_16.md +36 -9
- package/docs/ru/intlayer_with_nextjs_15.md +36 -9
- package/docs/ru/intlayer_with_nextjs_16.md +36 -9
- package/docs/tr/intlayer_with_nextjs_15.md +36 -9
- package/docs/tr/intlayer_with_nextjs_16.md +39 -21
- package/docs/vi/intlayer_with_nextjs_16.md +36 -9
- package/docs/zh/intlayer_with_nextjs_15.md +36 -9
- package/docs/zh/intlayer_with_nextjs_16.md +36 -9
- package/package.json +14 -14
- package/src/generated/blog.entry.ts +19 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-10-29
|
|
4
|
+
title: Intlayer và vue-i18n
|
|
5
|
+
description: Tích hợp Intlayer với vue-i18n cho giải pháp quốc tế hóa Vue.js toàn diện
|
|
6
|
+
keywords:
|
|
7
|
+
- vue-i18n
|
|
8
|
+
- Intlayer
|
|
9
|
+
- Quốc tế hóa
|
|
10
|
+
- Blog
|
|
11
|
+
- Vue.js
|
|
12
|
+
- Nuxt
|
|
13
|
+
- JavaScript
|
|
14
|
+
- Vue
|
|
15
|
+
slugs:
|
|
16
|
+
- blog
|
|
17
|
+
- intlayer-with-vue-i18n
|
|
18
|
+
history:
|
|
19
|
+
- version: 7.0.6
|
|
20
|
+
date: 2025-11-01
|
|
21
|
+
changes: Thêm plugin loadJSON
|
|
22
|
+
- version: 7.0.0
|
|
23
|
+
date: 2025-10-29
|
|
24
|
+
changes: Chuyển sang plugin syncJSON và viết lại toàn diện
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Quốc tế hóa Vue.js (i18n) với vue-i18n và Intlayer
|
|
28
|
+
|
|
29
|
+
## Mục lục
|
|
30
|
+
|
|
31
|
+
<TOC/>
|
|
32
|
+
|
|
33
|
+
## Intlayer là gì?
|
|
34
|
+
|
|
35
|
+
**Intlayer** là một thư viện quốc tế hóa mã nguồn mở sáng tạo, được thiết kế để khắc phục những hạn chế của các giải pháp i18n truyền thống. Nó cung cấp một cách tiếp cận hiện đại cho quản lý nội dung trong các ứng dụng Vue.js và Nuxt.
|
|
36
|
+
|
|
37
|
+
Xem so sánh cụ thể với vue-i18n trong bài viết blog của chúng tôi [vue-i18n vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/vi/vue-i18n_vs_intlayer.md).
|
|
38
|
+
|
|
39
|
+
## Tại sao kết hợp Intlayer với vue-i18n?
|
|
40
|
+
|
|
41
|
+
Trong khi Intlayer cung cấp một giải pháp i18n độc lập xuất sắc (xem hướng dẫn tích hợp Vue.js của chúng tôi [Vue.js integration guide](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_with_vite+vue.md)), bạn có thể muốn kết hợp nó với vue-i18n vì một số lý do:
|
|
42
|
+
|
|
43
|
+
1. **Mã nguồn hiện có**: Bạn đã có một triển khai vue-i18n ổn định và muốn dần dần chuyển sang trải nghiệm phát triển được cải thiện của Intlayer.
|
|
44
|
+
2. **Yêu cầu kế thừa**: Dự án của bạn cần tương thích với các plugin hoặc quy trình làm việc vue-i18n hiện có.
|
|
45
|
+
3. **Sự quen thuộc của đội ngũ**: Đội ngũ của bạn quen thuộc với vue-i18n nhưng muốn quản lý nội dung tốt hơn.
|
|
46
|
+
4. **Sử dụng các tính năng của Intlayer**: Bạn muốn sử dụng các tính năng của Intlayer như khai báo nội dung, tự động hóa dịch thuật, kiểm thử bản dịch, và nhiều hơn nữa.
|
|
47
|
+
|
|
48
|
+
**Vì vậy, Intlayer có thể được triển khai như một bộ chuyển đổi cho vue-i18n để giúp tự động hóa các bản dịch JSON của bạn trong CLI hoặc các pipeline CI/CD, kiểm thử bản dịch, và nhiều hơn nữa.**
|
|
49
|
+
|
|
50
|
+
Hướng dẫn này sẽ chỉ cho bạn cách tận dụng hệ thống khai báo nội dung vượt trội của Intlayer trong khi vẫn duy trì khả năng tương thích với vue-i18n.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Hướng Dẫn Từng Bước Để Thiết Lập Intlayer với vue-i18n
|
|
55
|
+
|
|
56
|
+
### Bước 1: Cài Đặt Các Phụ Thuộc
|
|
57
|
+
|
|
58
|
+
Cài đặt các gói cần thiết bằng trình quản lý gói bạn ưa thích:
|
|
59
|
+
|
|
60
|
+
```bash packageManager="npm"
|
|
61
|
+
npm install intlayer @intlayer/sync-json-plugin
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```bash packageManager="pnpm"
|
|
65
|
+
pnpm add intlayer @intlayer/sync-json-plugin
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```bash packageManager="yarn"
|
|
69
|
+
yarn add intlayer @intlayer/sync-json-plugin
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
```bash packageManager="bun"
|
|
73
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Giải thích các gói:**
|
|
77
|
+
|
|
78
|
+
- **intlayer**: Thư viện lõi cho khai báo và quản lý nội dung
|
|
79
|
+
- **@intlayer/sync-json-plugin**: Plugin để đồng bộ khai báo nội dung Intlayer sang định dạng JSON của vue-i18n
|
|
80
|
+
|
|
81
|
+
### Bước 2: Triển khai plugin Intlayer để bao bọc JSON
|
|
82
|
+
|
|
83
|
+
Tạo một tệp cấu hình Intlayer để định nghĩa các ngôn ngữ bạn hỗ trợ:
|
|
84
|
+
|
|
85
|
+
**Nếu bạn cũng muốn xuất các từ điển JSON cho vue-i18n**, hãy thêm plugin `syncJSON`:
|
|
86
|
+
|
|
87
|
+
```typescript fileName="intlayer.config.ts"
|
|
88
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
89
|
+
import { syncJSON } from "@intlayer/sync-json-plugin";
|
|
90
|
+
|
|
91
|
+
const config: IntlayerConfig = {
|
|
92
|
+
internationalization: {
|
|
93
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
94
|
+
defaultLocale: Locales.ENGLISH,
|
|
95
|
+
},
|
|
96
|
+
plugins: [
|
|
97
|
+
syncJSON({
|
|
98
|
+
source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`,
|
|
99
|
+
}),
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export default config;
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Plugin `syncJSON` sẽ tự động bao bọc JSON. Nó sẽ đọc và ghi các tệp JSON mà không thay đổi cấu trúc nội dung.
|
|
107
|
+
|
|
108
|
+
Nếu bạn muốn cho phép JSON đó tồn tại cùng với các tệp khai báo nội dung intlayer (`.content` files), Intlayer sẽ tiến hành theo cách sau:
|
|
109
|
+
|
|
110
|
+
1. tải cả tệp JSON và tệp khai báo nội dung và chuyển đổi chúng thành một từ điển intlayer.
|
|
111
|
+
2. nếu có xung đột giữa JSON và các tệp khai báo nội dung, Intlayer sẽ tiến hành hợp nhất tất cả các từ điển đó. Tùy thuộc vào ưu tiên của các plugin, và của tệp khai báo nội dung (tất cả đều có thể cấu hình).
|
|
112
|
+
|
|
113
|
+
Nếu có thay đổi được thực hiện bằng CLI để dịch JSON, hoặc sử dụng CMS, Intlayer sẽ cập nhật tệp JSON với các bản dịch mới.
|
|
114
|
+
|
|
115
|
+
Để xem thêm chi tiết về plugin `syncJSON`, vui lòng tham khảo [tài liệu plugin syncJSON](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/plugins/sync-json.md).
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
### (Tùy chọn) Bước 3: Triển khai dịch JSON theo từng thành phần
|
|
120
|
+
|
|
121
|
+
Theo mặc định, Intlayer sẽ tải, hợp nhất và đồng bộ cả tệp JSON và tệp khai báo nội dung. Xem [tài liệu khai báo nội dung](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/content_file.md) để biết thêm chi tiết. Nhưng nếu bạn muốn, sử dụng một plugin của Intlayer, bạn cũng có thể triển khai quản lý JSON theo từng thành phần được bản địa hóa ở bất kỳ đâu trong mã nguồn của bạn.
|
|
122
|
+
|
|
123
|
+
Để làm điều đó, bạn có thể sử dụng plugin `loadJSON`.
|
|
124
|
+
|
|
125
|
+
```ts fileName="intlayer.config.ts"
|
|
126
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
127
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
128
|
+
|
|
129
|
+
const config: IntlayerConfig = {
|
|
130
|
+
internationalization: {
|
|
131
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
132
|
+
defaultLocale: Locales.ENGLISH,
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
// Giữ cho các tệp JSON hiện tại của bạn đồng bộ với từ điển Intlayer
|
|
136
|
+
plugins: [
|
|
137
|
+
/**
|
|
138
|
+
* Sẽ tải tất cả các tệp JSON trong thư mục src khớp với mẫu {key}.i18n.json
|
|
139
|
+
*/
|
|
140
|
+
loadJSON({
|
|
141
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
142
|
+
locale: Locales.ENGLISH,
|
|
143
|
+
priority: 1, // Đảm bảo các tệp JSON này ưu tiên hơn các tệp tại `./locales/en/${key}.json`
|
|
144
|
+
}),
|
|
145
|
+
/**
|
|
146
|
+
* Sẽ tải và ghi đầu ra cùng các bản dịch trở lại các tệp JSON trong thư mục locales
|
|
147
|
+
*/
|
|
148
|
+
syncJSON({
|
|
149
|
+
source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`,
|
|
150
|
+
priority: 0,
|
|
151
|
+
}),
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export default config;
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Điều này sẽ tải tất cả các tệp JSON trong thư mục `src` khớp với mẫu `{key}.i18n.json` và tải chúng như các từ điển Intlayer.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Cấu hình Git
|
|
163
|
+
|
|
164
|
+
Loại trừ các tệp được tạo tự động khỏi kiểm soát phiên bản:
|
|
165
|
+
|
|
166
|
+
```plaintext fileName=".gitignore"
|
|
167
|
+
# Bỏ qua các tệp được tạo bởi Intlayer
|
|
168
|
+
.intlayer
|
|
169
|
+
intl
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Các tệp này được tạo lại tự động trong quá trình xây dựng và không cần phải cam kết vào kho lưu trữ của bạn.
|
|
173
|
+
|
|
174
|
+
### Tiện ích mở rộng VS Code
|
|
175
|
+
|
|
176
|
+
Để cải thiện trải nghiệm phát triển, hãy cài đặt **Tiện ích mở rộng Intlayer cho VS Code** chính thức:
|
|
177
|
+
|
|
178
|
+
[Cài đặt từ VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
179
|
+
|
|
180
|
+
[Install from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-12-24
|
|
3
|
-
updatedAt: 2025-
|
|
3
|
+
updatedAt: 2025-11-01
|
|
4
4
|
title: 如何使用 Intlayer 自动化您的 i18next JSON 翻译
|
|
5
5
|
description: 使用 Intlayer 和 i18next 自动化您的 JSON 翻译,提升 JavaScript 应用程序的国际化水平。
|
|
6
6
|
keywords:
|
|
@@ -20,6 +20,9 @@ slugs:
|
|
|
20
20
|
- blog
|
|
21
21
|
- intlayer-with-i18next
|
|
22
22
|
history:
|
|
23
|
+
- version: 7.0.6
|
|
24
|
+
date: 2025-11-01
|
|
25
|
+
changes: 添加 loadJSON 插件
|
|
23
26
|
- version: 7.0.0
|
|
24
27
|
date: 2025-10-29
|
|
25
28
|
changes: 更改为 syncJSON 插件
|
|
@@ -31,17 +34,18 @@ history:
|
|
|
31
34
|
|
|
32
35
|
**Intlayer** 是一个创新的开源国际化库,旨在解决传统 i18n 解决方案的不足。它为 JavaScript 应用程序中的内容管理提供了一种现代化的方法。
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
请参阅我们博客文章中的具体对比:[next-i18next vs. next-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md)。
|
|
35
38
|
|
|
36
|
-
##
|
|
39
|
+
## 为什么将 Intlayer 与 i18next 结合使用?
|
|
37
40
|
|
|
38
41
|
虽然 Intlayer 提供了一个出色的独立 i18n 解决方案(请参阅我们的[Next.js 集成指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_nextjs_16.md)),但您可能出于以下几个原因想将其与 i18next 结合使用:
|
|
39
42
|
|
|
40
43
|
1. **现有代码库**:您已经有一个成熟的 i18next 实现,并希望逐步迁移到 Intlayer 以获得更好的开发者体验。
|
|
41
44
|
2. **遗留需求**:您的项目需要兼容现有的 i18next 插件或工作流程。
|
|
42
45
|
3. **团队熟悉度**:您的团队熟悉 i18next,但希望获得更好的内容管理。
|
|
46
|
+
4. **使用 Intlayer 功能**:您希望使用 Intlayer 的内容声明、翻译键管理、翻译状态等功能。
|
|
43
47
|
|
|
44
|
-
**为此,Intlayer 可以作为 i18next
|
|
48
|
+
**为此,Intlayer 可以作为 i18next 的适配器实现,帮助您在 CLI 或 CI/CD 流水线中自动化 JSON 翻译、测试翻译等。**
|
|
45
49
|
|
|
46
50
|
本指南将向您展示如何利用 Intlayer 优越的内容声明系统,同时保持与 i18next 的兼容性。
|
|
47
51
|
|
|
@@ -51,9 +55,9 @@ history:
|
|
|
51
55
|
|
|
52
56
|
## 使用 i18next 设置 Intlayer 的分步指南
|
|
53
57
|
|
|
54
|
-
###
|
|
58
|
+
### 第一步:安装依赖
|
|
55
59
|
|
|
56
|
-
|
|
60
|
+
安装必要的软件包:
|
|
57
61
|
|
|
58
62
|
```bash packageManager="npm"
|
|
59
63
|
npm install intlayer @intlayer/sync-json-plugin
|
|
@@ -67,16 +71,20 @@ pnpm add intlayer @intlayer/sync-json-plugin
|
|
|
67
71
|
yarn add intlayer @intlayer/sync-json-plugin
|
|
68
72
|
```
|
|
69
73
|
|
|
70
|
-
|
|
74
|
+
```bash packageManager="bun"
|
|
75
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**软件包说明:**
|
|
71
79
|
|
|
72
|
-
- **intlayer
|
|
80
|
+
- **intlayer**:国际化管理、内容声明和构建的核心库
|
|
73
81
|
- **@intlayer/sync-json-plugin**:用于将 Intlayer 内容声明导出为兼容 i18next 的 JSON 格式的插件
|
|
74
82
|
|
|
75
|
-
###
|
|
83
|
+
### 第2步:实现 Intlayer 插件以封装 JSON
|
|
76
84
|
|
|
77
85
|
创建一个 Intlayer 配置文件以定义支持的语言环境:
|
|
78
86
|
|
|
79
|
-
|
|
87
|
+
**如果您还想导出用于 i18next 的 JSON 字典**,请添加 `syncJSON` 插件:
|
|
80
88
|
|
|
81
89
|
```typescript fileName="intlayer.config.ts"
|
|
82
90
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -89,7 +97,7 @@ const config: IntlayerConfig = {
|
|
|
89
97
|
},
|
|
90
98
|
plugins: [
|
|
91
99
|
syncJSON({
|
|
92
|
-
source: ({ key, locale }) => `./
|
|
100
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
93
101
|
}),
|
|
94
102
|
],
|
|
95
103
|
};
|
|
@@ -101,11 +109,55 @@ export default config;
|
|
|
101
109
|
|
|
102
110
|
如果你想让 JSON 与 intlayer 内容声明文件(`.content` 文件)共存,Intlayer 会按以下方式处理:
|
|
103
111
|
|
|
104
|
-
|
|
112
|
+
1. 加载 JSON 和内容声明文件,并将它们转换为 intlayer 字典。
|
|
113
|
+
2. 如果 JSON 和内容声明文件之间存在冲突,Intlayer 会合并所有字典。具体合并方式取决于插件的优先级以及内容声明文件的优先级(所有这些都是可配置的)。
|
|
114
|
+
|
|
115
|
+
如果通过 CLI 翻译 JSON 或使用 CMS 进行更改,Intlayer 会使用新的翻译更新 JSON 文件。
|
|
116
|
+
|
|
117
|
+
要查看更多关于 `syncJSON` 插件的详细信息,请参阅 [syncJSON 插件文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-json.md)。
|
|
118
|
+
|
|
119
|
+
### (可选)步骤 3:实现按组件的 JSON 翻译
|
|
120
|
+
|
|
121
|
+
默认情况下,Intlayer 会加载、合并并同步 JSON 文件和内容声明文件。更多详情请参阅 [内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。但如果你愿意,也可以使用 Intlayer 插件,在代码库中的任意位置实现按组件管理本地化的 JSON。
|
|
122
|
+
|
|
123
|
+
为此,你可以使用 `loadJSON` 插件。
|
|
124
|
+
|
|
125
|
+
```ts fileName="intlayer.config.ts"
|
|
126
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
127
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
128
|
+
|
|
129
|
+
const config: IntlayerConfig = {
|
|
130
|
+
internationalization: {
|
|
131
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
132
|
+
defaultLocale: Locales.ENGLISH,
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
// 保持当前的 JSON 文件与 Intlayer 字典同步
|
|
136
|
+
plugins: [
|
|
137
|
+
/**
|
|
138
|
+
* 将加载 src 目录中所有匹配模式 {key}.i18n.json 的 JSON 文件
|
|
139
|
+
*/
|
|
140
|
+
loadJSON({
|
|
141
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
142
|
+
locale: Locales.ENGLISH,
|
|
143
|
+
priority: 1, // 确保这些 JSON 文件优先于 `./locales/en/${key}.json` 中的文件
|
|
144
|
+
}),
|
|
145
|
+
/**
|
|
146
|
+
* 将加载并将输出和翻译写回到 locales 目录中的 JSON 文件
|
|
147
|
+
*/
|
|
148
|
+
syncJSON({
|
|
149
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
150
|
+
priority: 0,
|
|
151
|
+
}),
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export default config;
|
|
156
|
+
```
|
|
105
157
|
|
|
106
|
-
|
|
158
|
+
这将加载 `src` 目录中所有匹配 `{key}.i18n.json` 模式的 JSON 文件,并将它们作为 Intlayer 字典加载。
|
|
107
159
|
|
|
108
|
-
|
|
160
|
+
---
|
|
109
161
|
|
|
110
162
|
## Git 配置
|
|
111
163
|
|
|
@@ -120,8 +172,6 @@ export default config;
|
|
|
120
172
|
|
|
121
173
|
### VS Code 扩展
|
|
122
174
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
[从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
175
|
+
为了提升开发者体验,建议安装官方 **Intlayer VS Code 扩展**:
|
|
126
176
|
|
|
127
177
|
[从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
@@ -16,12 +16,15 @@ slugs:
|
|
|
16
16
|
- blog
|
|
17
17
|
- intlayer-with-next-i18next
|
|
18
18
|
history:
|
|
19
|
+
- version: 7.0.6
|
|
20
|
+
date: 2025-11-01
|
|
21
|
+
changes: 添加 loadJSON 插件
|
|
19
22
|
- version: 7.0.0
|
|
20
23
|
date: 2025-10-29
|
|
21
24
|
changes: 更改为 syncJSON 插件并全面重写
|
|
22
25
|
---
|
|
23
26
|
|
|
24
|
-
# 使用 next-i18next 和 Intlayer 实现 Next.js
|
|
27
|
+
# 使用 next-i18next 和 Intlayer 实现 Next.js 国际化 (i18n)
|
|
25
28
|
|
|
26
29
|
## 目录
|
|
27
30
|
|
|
@@ -33,28 +36,28 @@ history:
|
|
|
33
36
|
|
|
34
37
|
然而,next-i18next 也存在一些挑战:
|
|
35
38
|
|
|
36
|
-
- **配置复杂**:设置 next-i18next
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
- **类型安全有限**:TypeScript
|
|
39
|
+
- **配置复杂**:设置 next-i18next 需要多个配置文件,并且需要仔细配置服务器端和客户端的 i18n 实例。
|
|
40
|
+
- **翻译文件分散**:翻译文件通常存储在与组件分开的目录中,导致维护一致性更加困难。
|
|
41
|
+
- **手动命名空间管理**:开发者需要手动管理命名空间,并确保翻译资源的正确加载。
|
|
42
|
+
- **类型安全有限**:TypeScript 支持需要额外配置,且不提供翻译的自动类型生成。
|
|
40
43
|
|
|
41
44
|
## 什么是 Intlayer?
|
|
42
45
|
|
|
43
46
|
**Intlayer** 是一个创新的开源国际化库,旨在解决传统 i18n 解决方案的不足。它为 Next.js 应用提供了一种现代化的内容管理方法。
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
请参阅我们博客文章中关于 next-i18next、next-intl 和 Intlayer 的具体对比:[next-i18next vs. next-intl vs. Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md)。
|
|
46
49
|
|
|
47
50
|
## 为什么将 Intlayer 与 next-i18next 结合使用?
|
|
48
51
|
|
|
49
|
-
虽然 Intlayer
|
|
52
|
+
虽然 Intlayer 提供了一个出色的独立国际化解决方案(请参阅我们的[Next.js 集成指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_nextjs_16.md)),但您可能出于以下几个原因希望将其与 next-i18next 结合使用:
|
|
50
53
|
|
|
51
54
|
1. **现有代码库**:您已经有一个成熟的 next-i18next 实现,并希望逐步迁移到 Intlayer 以获得更好的开发者体验。
|
|
52
55
|
2. **遗留需求**:您的项目需要兼容现有的 i18next 插件或工作流程。
|
|
53
56
|
3. **团队熟悉度**:您的团队对 next-i18next 很熟悉,但希望获得更好的内容管理。
|
|
54
57
|
|
|
55
|
-
**为此,Intlayer 可以作为 next-i18next
|
|
58
|
+
**为此,Intlayer 可以作为 next-i18next 的适配器来实现,帮助你在 CLI 或 CI/CD 流水线中自动化处理 JSON 翻译,测试你的翻译内容,等等。**
|
|
56
59
|
|
|
57
|
-
|
|
60
|
+
本指南将展示如何利用 Intlayer 优越的内容声明系统,同时保持与 next-i18next 的兼容性。
|
|
58
61
|
|
|
59
62
|
---
|
|
60
63
|
|
|
@@ -62,7 +65,7 @@ history:
|
|
|
62
65
|
|
|
63
66
|
### 第一步:安装依赖
|
|
64
67
|
|
|
65
|
-
|
|
68
|
+
使用你喜欢的包管理器安装必要的包:
|
|
66
69
|
|
|
67
70
|
```bash packageManager="npm"
|
|
68
71
|
npm install intlayer @intlayer/sync-json-plugin
|
|
@@ -76,20 +79,20 @@ pnpm add intlayer @intlayer/sync-json-plugin
|
|
|
76
79
|
yarn add intlayer @intlayer/sync-json-plugin
|
|
77
80
|
```
|
|
78
81
|
|
|
82
|
+
```bash packageManager="bun"
|
|
83
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
84
|
+
```
|
|
85
|
+
|
|
79
86
|
**包说明:**
|
|
80
87
|
|
|
81
88
|
- **intlayer**:内容声明和管理的核心库
|
|
82
|
-
-
|
|
83
|
-
- **i18next**:核心国际化框架
|
|
84
|
-
- **next-i18next**:i18next 的 Next.js 封装器
|
|
85
|
-
- **i18next-resources-to-backend**:i18next 的动态资源加载
|
|
86
|
-
- **@intlayer/sync-json-plugin**:将 Intlayer 内容声明同步为 i18next JSON 格式的插件
|
|
89
|
+
- **@intlayer/sync-json-plugin**:用于将 Intlayer 内容声明同步为 i18next JSON 格式的插件
|
|
87
90
|
|
|
88
91
|
### 第2步:实现 Intlayer 插件以封装 JSON
|
|
89
92
|
|
|
90
|
-
创建一个 Intlayer
|
|
93
|
+
创建一个 Intlayer 配置文件以定义你支持的语言环境:
|
|
91
94
|
|
|
92
|
-
|
|
95
|
+
**如果你还想导出用于 i18next 的 JSON 词典**,请添加 `syncJSON` 插件:
|
|
93
96
|
|
|
94
97
|
```typescript fileName="intlayer.config.ts"
|
|
95
98
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -102,7 +105,7 @@ const config: IntlayerConfig = {
|
|
|
102
105
|
},
|
|
103
106
|
plugins: [
|
|
104
107
|
syncJSON({
|
|
105
|
-
source: ({ key, locale }) => `./
|
|
108
|
+
source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
|
|
106
109
|
}),
|
|
107
110
|
],
|
|
108
111
|
};
|
|
@@ -115,11 +118,55 @@ export default config;
|
|
|
115
118
|
如果你想让 JSON 与 intlayer 内容声明文件(`.content` 文件)共存,Intlayer 会按以下方式处理:
|
|
116
119
|
|
|
117
120
|
1. 加载 JSON 和内容声明文件,并将它们转换为 intlayer 字典。
|
|
118
|
-
|
|
119
|
-
2. 如果 JSON 文件和内容声明文件之间存在冲突,Intlayer 将合并所有字典。合并的优先级取决于插件的优先级以及内容声明文件的优先级(所有这些都是可配置的)。
|
|
121
|
+
2. 如果 JSON 和内容声明文件之间存在冲突,Intlayer 会合并所有字典。具体合并方式取决于插件的优先级以及内容声明文件的优先级(所有均可配置)。
|
|
120
122
|
|
|
121
123
|
如果使用 CLI 翻译 JSON,或使用 CMS 进行更改,Intlayer 将使用新的翻译更新 JSON 文件。
|
|
122
124
|
|
|
125
|
+
要查看更多关于 `syncJSON` 插件的详细信息,请参阅 [syncJSON 插件文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-json.md)。
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
### (可选)步骤 3:实现按组件的 JSON 翻译
|
|
130
|
+
|
|
131
|
+
默认情况下,Intlayer 会加载、合并并同步 JSON 和内容声明文件。更多详情请参阅 [内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。但如果你愿意,也可以使用 Intlayer 插件,在代码库中的任何位置实现按组件管理本地化的 JSON。
|
|
132
|
+
|
|
133
|
+
为此,您可以使用 `loadJSON` 插件。
|
|
134
|
+
|
|
135
|
+
```ts fileName="intlayer.config.ts"
|
|
136
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
137
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
138
|
+
|
|
139
|
+
const config: IntlayerConfig = {
|
|
140
|
+
internationalization: {
|
|
141
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
142
|
+
defaultLocale: Locales.ENGLISH,
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
// 保持您当前的 JSON 文件与 Intlayer 字典同步
|
|
146
|
+
plugins: [
|
|
147
|
+
/**
|
|
148
|
+
* 将加载 src 中所有匹配模式 {key}.i18n.json 的 JSON 文件
|
|
149
|
+
*/
|
|
150
|
+
loadJSON({
|
|
151
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
152
|
+
locale: Locales.ENGLISH,
|
|
153
|
+
priority: 1, // 确保这些 JSON 文件优先于 `./public/locales/en/${key}.json` 中的文件
|
|
154
|
+
}),
|
|
155
|
+
/**
|
|
156
|
+
* 将输出和翻译写回到 locales 目录中的 JSON 文件
|
|
157
|
+
*/
|
|
158
|
+
syncJSON({
|
|
159
|
+
source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
|
|
160
|
+
priority: 0,
|
|
161
|
+
}),
|
|
162
|
+
],
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
export default config;
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
这将加载 `src` 目录中所有匹配 `{key}.i18n.json` 模式的 JSON 文件,并将它们作为 Intlayer 字典加载。
|
|
169
|
+
|
|
123
170
|
---
|
|
124
171
|
|
|
125
172
|
## Git 配置
|
|
@@ -139,5 +186,3 @@ intl
|
|
|
139
186
|
为了提升开发者体验,请安装官方的 **Intlayer VS Code 扩展**:
|
|
140
187
|
|
|
141
188
|
[从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
142
|
-
|
|
143
|
-
[从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
@@ -7,6 +7,9 @@ slugs:
|
|
|
7
7
|
- blog
|
|
8
8
|
- intlayer-with-next-intl
|
|
9
9
|
history:
|
|
10
|
+
- version: 7.0.6
|
|
11
|
+
date: 2025-11-01
|
|
12
|
+
changes: 添加 loadJSON 插件
|
|
10
13
|
- version: 7.0.0
|
|
11
14
|
date: 2025-10-29
|
|
12
15
|
changes: 更改为 syncJSON 插件
|
|
@@ -24,11 +27,11 @@ history:
|
|
|
24
27
|
|
|
25
28
|
虽然 Intlayer 提供了一个出色的独立 i18n 解决方案(请参阅我们的[Next.js 集成指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_nextjs_16.md)),但您可能出于以下几个原因想将其与 next-intl 结合使用:
|
|
26
29
|
|
|
27
|
-
1.
|
|
30
|
+
1. **现有代码库**:您已经有一个成熟的 next-intl 实现,并希望逐步迁移到 Intlayer 以获得更好的开发者体验。
|
|
28
31
|
2. **遗留需求**:您的项目需要兼容现有的 next-intl 插件或工作流程。
|
|
29
|
-
3. **团队熟悉度**:您的团队对 next-intl
|
|
32
|
+
3. **团队熟悉度**:您的团队对 next-intl 感到熟悉,但希望获得更好的内容管理。
|
|
30
33
|
|
|
31
|
-
**为此,Intlayer 可以作为 next-intl 的适配器来实现,帮助您在 CLI 或 CI/CD 流水线中自动化 JSON
|
|
34
|
+
**为此,Intlayer 可以作为 next-intl 的适配器来实现,帮助您在 CLI 或 CI/CD 流水线中自动化 JSON 翻译、测试翻译等功能。**
|
|
32
35
|
|
|
33
36
|
本指南将向您展示如何利用 Intlayer 优越的内容声明系统,同时保持与 next-intl 的兼容性。
|
|
34
37
|
|
|
@@ -36,7 +39,7 @@ history:
|
|
|
36
39
|
|
|
37
40
|
<TOC/>
|
|
38
41
|
|
|
39
|
-
## 使用 next-intl 设置 Intlayer
|
|
42
|
+
## 使用 next-intl 设置 Intlayer 的分步指南
|
|
40
43
|
|
|
41
44
|
### 第一步:安装依赖
|
|
42
45
|
|
|
@@ -54,16 +57,20 @@ pnpm add intlayer @intlayer/sync-json-plugin
|
|
|
54
57
|
yarn add intlayer @intlayer/sync-json-plugin
|
|
55
58
|
```
|
|
56
59
|
|
|
57
|
-
|
|
60
|
+
```bash packageManager="bun"
|
|
61
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**包描述:**
|
|
58
65
|
|
|
59
66
|
- **intlayer**:国际化管理、内容声明和构建的核心库
|
|
60
|
-
- **@intlayer/sync-json-plugin**:用于将 Intlayer 内容声明导出为 next-intl
|
|
67
|
+
- **@intlayer/sync-json-plugin**:用于将 Intlayer 内容声明导出为 next-intl 兼容 JSON 格式的插件
|
|
61
68
|
|
|
62
|
-
### 第2步:实现 Intlayer
|
|
69
|
+
### 第2步:实现 Intlayer 插件以封装 JSON
|
|
63
70
|
|
|
64
71
|
创建一个 Intlayer 配置文件以定义支持的语言环境:
|
|
65
72
|
|
|
66
|
-
|
|
73
|
+
**如果您还想为 next-intl 导出 JSON 字典**,请添加 `syncJSON` 插件:
|
|
67
74
|
|
|
68
75
|
```typescript fileName="intlayer.config.ts"
|
|
69
76
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -84,15 +91,58 @@ const config: IntlayerConfig = {
|
|
|
84
91
|
export default config;
|
|
85
92
|
```
|
|
86
93
|
|
|
87
|
-
`syncJSON`
|
|
94
|
+
`syncJSON` 插件会自动封装 JSON。它会读取和写入 JSON 文件,而不会改变内容结构。
|
|
88
95
|
|
|
89
96
|
如果你想让 JSON 与 intlayer 内容声明文件(`.content` 文件)共存,Intlayer 会按以下方式处理:
|
|
90
97
|
|
|
91
98
|
1. 加载 JSON 和内容声明文件,并将它们转换为 intlayer 字典。
|
|
92
99
|
|
|
93
|
-
2. 如果 JSON 文件和内容声明文件之间存在冲突,Intlayer
|
|
100
|
+
2. 如果 JSON 文件和内容声明文件之间存在冲突,Intlayer 将合并所有字典。合并的优先级取决于插件的优先级以及内容声明文件的优先级(所有优先级均可配置)。
|
|
101
|
+
|
|
102
|
+
如果通过 CLI 翻译 JSON 或使用 CMS 进行更改,Intlayer 会使用新的翻译更新 JSON 文件。
|
|
103
|
+
|
|
104
|
+
有关 `syncJSON` 插件的更多详细信息,请参阅 [syncJSON 插件文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/plugins/sync-json.md)。
|
|
105
|
+
|
|
106
|
+
### (可选)步骤 3:实现按组件的 JSON 翻译
|
|
107
|
+
|
|
108
|
+
默认情况下,Intlayer 会加载、合并并同步 JSON 文件和内容声明文件。更多详情请参见[内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。但如果你愿意,也可以使用 Intlayer 插件,在代码库中的任意位置实现基于组件的 JSON 本地化管理。
|
|
109
|
+
|
|
110
|
+
为此,你可以使用 `loadJSON` 插件。
|
|
111
|
+
|
|
112
|
+
```ts fileName="intlayer.config.ts"
|
|
113
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
114
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
115
|
+
|
|
116
|
+
const config: IntlayerConfig = {
|
|
117
|
+
internationalization: {
|
|
118
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
119
|
+
defaultLocale: Locales.ENGLISH,
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
// 保持您当前的 JSON 文件与 Intlayer 字典同步
|
|
123
|
+
plugins: [
|
|
124
|
+
/**
|
|
125
|
+
* 将加载 src 目录中所有匹配模式 {key}.i18n.json 的 JSON 文件
|
|
126
|
+
*/
|
|
127
|
+
loadJSON({
|
|
128
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
129
|
+
locale: Locales.ENGLISH,
|
|
130
|
+
priority: 1, // 确保这些 JSON 文件优先于 `./locales/en/${key}.json` 中的文件
|
|
131
|
+
}),
|
|
132
|
+
/**
|
|
133
|
+
* 将加载并将输出和翻译写回到 locales 目录中的 JSON 文件
|
|
134
|
+
*/
|
|
135
|
+
syncJSON({
|
|
136
|
+
source: ({ key, locale }) => `./messages/${locale}/${key}.json`,
|
|
137
|
+
priority: 0,
|
|
138
|
+
}),
|
|
139
|
+
],
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
export default config;
|
|
143
|
+
```
|
|
94
144
|
|
|
95
|
-
|
|
145
|
+
这将加载 `src` 目录中所有匹配 `{key}.i18n.json` 模式的 JSON 文件,并将它们作为 Intlayer 字典加载。
|
|
96
146
|
|
|
97
147
|
## Git 配置
|
|
98
148
|
|
|
@@ -110,5 +160,3 @@ export default config;
|
|
|
110
160
|
为了提升开发者体验,请安装官方的 **Intlayer VS Code 扩展**:
|
|
111
161
|
|
|
112
162
|
[从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
113
|
-
|
|
114
|
-
[从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|