@intlayer/docs 7.0.4-canary.0 → 7.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/blog/ar/intlayer_with_i18next.md +68 -106
  2. package/blog/ar/intlayer_with_next-i18next.md +84 -288
  3. package/blog/ar/intlayer_with_next-intl.md +58 -337
  4. package/blog/ar/intlayer_with_react-i18next.md +68 -290
  5. package/blog/ar/intlayer_with_react-intl.md +63 -266
  6. package/blog/de/intlayer_with_i18next.md +77 -97
  7. package/blog/de/intlayer_with_next-i18next.md +69 -296
  8. package/blog/de/intlayer_with_next-intl.md +59 -340
  9. package/blog/de/intlayer_with_react-i18next.md +68 -290
  10. package/blog/de/intlayer_with_react-intl.md +62 -264
  11. package/blog/en/intlayer_with_i18next.md +36 -1638
  12. package/blog/en/intlayer_with_next-i18next.md +22 -847
  13. package/blog/en/intlayer_with_next-intl.md +32 -1053
  14. package/blog/en/intlayer_with_react-i18next.md +38 -764
  15. package/blog/en/intlayer_with_react-intl.md +42 -1018
  16. package/blog/en-GB/intlayer_with_i18next.md +67 -103
  17. package/blog/en-GB/intlayer_with_next-i18next.md +71 -292
  18. package/blog/en-GB/intlayer_with_next-intl.md +58 -337
  19. package/blog/en-GB/intlayer_with_react-i18next.md +67 -289
  20. package/blog/en-GB/intlayer_with_react-intl.md +61 -264
  21. package/blog/es/intlayer_with_i18next.md +67 -103
  22. package/blog/es/intlayer_with_next-i18next.md +71 -296
  23. package/blog/es/intlayer_with_next-intl.md +57 -338
  24. package/blog/es/intlayer_with_react-i18next.md +68 -290
  25. package/blog/es/intlayer_with_react-intl.md +62 -265
  26. package/blog/fr/intlayer_with_i18next.md +66 -104
  27. package/blog/fr/intlayer_with_next-i18next.md +82 -285
  28. package/blog/fr/intlayer_with_next-intl.md +57 -338
  29. package/blog/fr/intlayer_with_react-i18next.md +67 -289
  30. package/blog/fr/intlayer_with_react-intl.md +61 -264
  31. package/blog/hi/intlayer_with_i18next.md +68 -104
  32. package/blog/hi/intlayer_with_next-i18next.md +74 -299
  33. package/blog/hi/intlayer_with_next-intl.md +57 -239
  34. package/blog/hi/intlayer_with_react-i18next.md +69 -291
  35. package/blog/hi/intlayer_with_react-intl.md +65 -268
  36. package/blog/id/intlayer_with_i18next.md +126 -0
  37. package/blog/id/intlayer_with_next-i18next.md +142 -0
  38. package/blog/id/intlayer_with_next-intl.md +113 -0
  39. package/blog/id/intlayer_with_react-i18next.md +124 -0
  40. package/blog/id/intlayer_with_react-intl.md +122 -0
  41. package/blog/it/intlayer_with_i18next.md +67 -103
  42. package/blog/it/intlayer_with_next-i18next.md +71 -296
  43. package/blog/it/intlayer_with_next-intl.md +57 -338
  44. package/blog/it/intlayer_with_react-i18next.md +68 -290
  45. package/blog/it/intlayer_with_react-intl.md +62 -265
  46. package/blog/ja/intlayer_with_i18next.md +68 -103
  47. package/blog/ja/intlayer_with_next-i18next.md +85 -283
  48. package/blog/ja/intlayer_with_next-intl.md +58 -336
  49. package/blog/ja/intlayer_with_react-i18next.md +68 -290
  50. package/blog/ja/intlayer_with_react-intl.md +62 -264
  51. package/blog/ko/intlayer_with_i18next.md +80 -96
  52. package/blog/ko/intlayer_with_next-i18next.md +85 -287
  53. package/blog/ko/intlayer_with_next-intl.md +68 -327
  54. package/blog/ko/intlayer_with_react-i18next.md +68 -290
  55. package/blog/ko/intlayer_with_react-intl.md +64 -266
  56. package/blog/pl/intlayer_with_i18next.md +126 -0
  57. package/blog/pl/intlayer_with_next-i18next.md +142 -0
  58. package/blog/pl/intlayer_with_next-intl.md +111 -0
  59. package/blog/pl/intlayer_with_react-i18next.md +124 -0
  60. package/blog/pl/intlayer_with_react-intl.md +122 -0
  61. package/blog/pt/intlayer_with_i18next.md +67 -103
  62. package/blog/pt/intlayer_with_next-i18next.md +72 -293
  63. package/blog/pt/intlayer_with_next-intl.md +57 -256
  64. package/blog/pt/intlayer_with_react-i18next.md +104 -78
  65. package/blog/pt/intlayer_with_react-intl.md +62 -266
  66. package/blog/ru/intlayer_with_i18next.md +66 -104
  67. package/blog/ru/intlayer_with_next-i18next.md +71 -296
  68. package/blog/ru/intlayer_with_next-intl.md +58 -337
  69. package/blog/ru/intlayer_with_react-i18next.md +68 -290
  70. package/blog/ru/intlayer_with_react-intl.md +62 -265
  71. package/blog/tr/intlayer_with_i18next.md +71 -107
  72. package/blog/tr/intlayer_with_next-i18next.md +72 -297
  73. package/blog/tr/intlayer_with_next-intl.md +58 -339
  74. package/blog/tr/intlayer_with_react-i18next.md +69 -291
  75. package/blog/tr/intlayer_with_react-intl.md +63 -285
  76. package/blog/vi/intlayer_with_i18next.md +126 -0
  77. package/blog/vi/intlayer_with_next-i18next.md +142 -0
  78. package/blog/vi/intlayer_with_next-intl.md +111 -0
  79. package/blog/vi/intlayer_with_react-i18next.md +124 -0
  80. package/blog/vi/intlayer_with_react-intl.md +122 -0
  81. package/blog/zh/intlayer_with_i18next.md +67 -102
  82. package/blog/zh/intlayer_with_next-i18next.md +72 -296
  83. package/blog/zh/intlayer_with_next-intl.md +58 -336
  84. package/blog/zh/intlayer_with_react-i18next.md +68 -290
  85. package/blog/zh/intlayer_with_react-intl.md +63 -106
  86. package/docs/ar/plugins/sync-json.md +244 -0
  87. package/docs/de/plugins/sync-json.md +244 -0
  88. package/docs/en/intlayer_cli.md +25 -0
  89. package/docs/en/intlayer_with_nextjs_14.md +2 -0
  90. package/docs/en/intlayer_with_nextjs_15.md +2 -0
  91. package/docs/en/intlayer_with_nextjs_16.md +2 -0
  92. package/docs/en/plugins/sync-json.md +1 -1
  93. package/docs/en-GB/plugins/sync-json.md +244 -0
  94. package/docs/es/plugins/sync-json.md +244 -0
  95. package/docs/fr/plugins/sync-json.md +244 -0
  96. package/docs/hi/plugins/sync-json.md +244 -0
  97. package/docs/id/plugins/sync-json.md +244 -0
  98. package/docs/it/plugins/sync-json.md +244 -0
  99. package/docs/ja/plugins/sync-json.md +244 -0
  100. package/docs/ko/plugins/sync-json.md +244 -0
  101. package/docs/pl/plugins/sync-json.md +244 -0
  102. package/docs/pt/plugins/sync-json.md +244 -0
  103. package/docs/ru/plugins/sync-json.md +244 -0
  104. package/docs/tr/plugins/sync-json.md +245 -0
  105. package/docs/vi/plugins/sync-json.md +244 -0
  106. package/docs/zh/plugins/sync-json.md +244 -0
  107. package/package.json +14 -14
@@ -0,0 +1,244 @@
1
+ ---
2
+ createdAt: 2025-03-13
3
+ updatedAt: 2025-10-05
4
+ title: Plugin Đồng bộ JSON
5
+ description: Đồng bộ từ điển Intlayer với các tệp JSON i18n của bên thứ ba (i18next, next-intl, react-intl, vue-i18n và nhiều hơn nữa). Giữ nguyên i18n hiện có của bạn trong khi sử dụng Intlayer để quản lý, dịch và kiểm tra các thông điệp của bạn.
6
+ keywords:
7
+ - Intlayer
8
+ - Đồng bộ JSON
9
+ - i18next
10
+ - next-intl
11
+ - react-intl
12
+ - vue-i18n
13
+ - next-translate
14
+ - nuxt-i18n
15
+ - LinguiJS
16
+ - Polyglot.js
17
+ - Solid-i18next
18
+ - svelte-i18n
19
+ - i18n
20
+ - bản dịch
21
+ slugs:
22
+ - doc
23
+ - plugin
24
+ - sync-json
25
+ history:
26
+ - version: 6.1.6
27
+ date: 2025-10-05
28
+ changes: Tài liệu Plugin Đồng bộ JSON ban đầu
29
+ ---
30
+
31
+ # Đồng bộ JSON (cầu nối i18n)
32
+
33
+ Sử dụng Intlayer như một tiện ích bổ sung cho bộ công cụ i18n hiện có của bạn. Plugin này giữ cho các thông điệp JSON của bạn đồng bộ với từ điển Intlayer để bạn có thể:
34
+
35
+ - Giữ nguyên i18next, next-intl, react-intl, vue-i18n, next-translate, nuxt-i18n, Solid-i18next, svelte-i18n, v.v.
36
+ - Quản lý và dịch các thông điệp của bạn với Intlayer (CLI, CI, nhà cung cấp, CMS), mà không cần tái cấu trúc ứng dụng của bạn.
37
+ - Phát hành các hướng dẫn và nội dung SEO nhắm mục tiêu từng hệ sinh thái, đồng thời đề xuất Intlayer như lớp quản lý JSON.
38
+
39
+ Ghi chú và phạm vi hiện tại:
40
+
41
+ - Việc ngoại hóa sang CMS hoạt động cho cả bản dịch và văn bản cổ điển.
42
+ - Chưa hỗ trợ chèn, số nhiều/ICU, hoặc các tính năng runtime nâng cao của các thư viện khác.
43
+ - Trình chỉnh sửa trực quan chưa được hỗ trợ cho các đầu ra i18n của bên thứ ba.
44
+
45
+ ### Khi nào nên sử dụng plugin này
46
+
47
+ - Bạn đã sử dụng một thư viện i18n và lưu trữ các thông điệp trong các tệp JSON.
48
+ - Bạn muốn hỗ trợ điền bằng AI, kiểm tra trong CI, và vận hành nội dung mà không thay đổi runtime kết xuất của bạn.
49
+
50
+ ## Cài đặt
51
+
52
+ ```bash
53
+ pnpm add -D @intlayer/sync-json-plugin
54
+ # hoặc
55
+ npm i -D @intlayer/sync-json-plugin
56
+ ```
57
+
58
+ ## Bắt đầu nhanh
59
+
60
+ Thêm plugin vào `intlayer.config.ts` của bạn và trỏ nó đến cấu trúc JSON hiện có của bạn.
61
+
62
+ ```ts fileName="intlayer.config.ts"
63
+ import { defineConfig, Locales } from "intlayer";
64
+ import { syncJSON } from "@intlayer/sync-json-plugin";
65
+
66
+ export default defineConfig({
67
+ internationalization: {
68
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
69
+ defaultLocale: Locales.ENGLISH,
70
+ },
71
+
72
+ // Giữ cho các tệp JSON hiện tại của bạn đồng bộ với từ điển Intlayer
73
+ plugins: [
74
+ syncJSON({
75
+ // Bố cục theo từng locale, từng namespace (ví dụ: next-intl, i18next với namespaces)
76
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
77
+ }),
78
+ ],
79
+ });
80
+ ```
81
+
82
+ Phương án thay thế: một tệp duy nhất cho mỗi locale (thường dùng với i18next/react-intl):
83
+
84
+ ```ts fileName="intlayer.config.ts"
85
+ plugins: [
86
+ syncJSON({
87
+ source: ({ locale }) => `./locales/${locale}.json`,
88
+ }),
89
+ ];
90
+ ```
91
+
92
+ ### Cách hoạt động
93
+
94
+ - Đọc: plugin phát hiện các tệp JSON từ builder `source` của bạn và tải chúng như các từ điển Intlayer.
95
+ - Ghi: sau khi build và điền, plugin ghi các tệp JSON đã được bản địa hóa trở lại cùng đường dẫn (với một dòng mới cuối cùng để tránh lỗi định dạng).
96
+ - Tự động điền: plugin khai báo một đường dẫn `autoFill` cho mỗi từ điển. Chạy lệnh `intlayer fill` sẽ chỉ cập nhật các bản dịch còn thiếu trong các tệp JSON của bạn theo mặc định.
97
+
98
+ API:
99
+
100
+ ```ts
101
+ syncJSON({
102
+ source: ({ key, locale }) => string, // bắt buộc
103
+ location?: string, // nhãn tùy chọn, mặc định: "plugin"
104
+ priority?: number, // ưu tiên tùy chọn để giải quyết xung đột, mặc định: 0
105
+ });
106
+ ```
107
+
108
+ ## Nhiều nguồn JSON và ưu tiên
109
+
110
+ Bạn có thể thêm nhiều plugin `syncJSON` để đồng bộ các nguồn JSON khác nhau. Điều này hữu ích khi bạn có nhiều thư viện i18n hoặc các cấu trúc JSON khác nhau trong dự án của mình.
111
+
112
+ ### Hệ thống ưu tiên
113
+
114
+ Khi nhiều plugin cùng nhắm tới cùng một khóa từ điển, tham số `priority` sẽ quyết định plugin nào được ưu tiên:
115
+
116
+ - Số ưu tiên cao hơn thắng số ưu tiên thấp hơn
117
+ - Ưu tiên mặc định của các tệp `.content` là `0`
118
+ - Ưu tiên mặc định của các tệp nội dung plugin là `-1`
119
+ - Các plugin có cùng mức ưu tiên sẽ được xử lý theo thứ tự xuất hiện trong cấu hình
120
+
121
+ ```ts fileName="intlayer.config.ts"
122
+ import { defineConfig, Locales } from "intlayer";
123
+ import { syncJSON } from "@intlayer/sync-json-plugin";
124
+
125
+ export default defineConfig({
126
+ internationalization: {
127
+ locales: [Locales.ENGLISH, Locales.FRENCH],
128
+ defaultLocale: Locales.ENGLISH,
129
+ },
130
+
131
+ plugins: [
132
+ // Nguồn JSON chính (ưu tiên cao nhất)
133
+ syncJSON({
134
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
135
+ location: "main-translations",
136
+ priority: 10,
137
+ }),
138
+
139
+ // Nguồn JSON dự phòng (ưu tiên thấp hơn)
140
+ syncJSON({
141
+ source: ({ locale }) => `./fallback-locales/${locale}.json`,
142
+ location: "fallback-translations",
143
+ priority: 5,
144
+ }),
145
+
146
+ // Nguồn JSON kế thừa (ưu tiên thấp nhất)
147
+ syncJSON({
148
+ source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.json`,
149
+ location: "legacy-translations",
150
+ priority: 1,
151
+ }),
152
+ ],
153
+ });
154
+ ```
155
+
156
+ ### Giải quyết xung đột
157
+
158
+ Khi cùng một khóa dịch tồn tại trong nhiều nguồn JSON:
159
+
160
+ 1. Plugin có mức ưu tiên cao nhất sẽ quyết định giá trị cuối cùng
161
+ 2. Các nguồn có mức ưu tiên thấp hơn được sử dụng làm phương án dự phòng cho các khóa bị thiếu
162
+ 3. Điều này cho phép bạn duy trì các bản dịch kế thừa trong khi dần dần chuyển sang các cấu trúc mới
163
+
164
+ ## Tích hợp
165
+
166
+ Dưới đây là các ánh xạ phổ biến. Giữ nguyên runtime của bạn; chỉ cần thêm plugin.
167
+
168
+ ### i18next
169
+
170
+ Bố cục tệp điển hình: `./public/locales/{locale}/{namespace}.json` hoặc `./locales/{locale}/{namespace}.json`.
171
+
172
+ ```ts fileName="intlayer.config.ts"
173
+ import { syncJSON } from "@intlayer/sync-json-plugin";
174
+
175
+ export default {
176
+ plugins: [
177
+ syncJSON({
178
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`, // nguồn tệp JSON đồng bộ theo khóa và ngôn ngữ
179
+ }),
180
+ ],
181
+ };
182
+ ```
183
+
184
+ ### next-intl
185
+
186
+ Các thông điệp JSON theo từng ngôn ngữ (thường là `./messages/{locale}.json`) hoặc theo từng namespace.
187
+
188
+ ```ts fileName="intlayer.config.ts"
189
+ plugins: [
190
+ syncJSON({
191
+ source: ({ locale, key }) => `./messages/${locale}/${key}.json`, // nguồn tệp JSON đồng bộ theo ngôn ngữ và khóa
192
+ }),
193
+ ];
194
+ ```
195
+
196
+ Xem thêm: `docs/vi/intlayer_with_next-intl.md`.
197
+
198
+ ### react-intl
199
+
200
+ Thông thường có một tệp JSON duy nhất cho mỗi ngôn ngữ:
201
+
202
+ ```ts fileName="intlayer.config.ts"
203
+ plugins: [
204
+ syncJSON({
205
+ source: ({ locale }) => `./locales/${locale}.json`, // nguồn tệp JSON đồng bộ theo ngôn ngữ
206
+ }),
207
+ ];
208
+ ```
209
+
210
+ ### vue-i18n
211
+
212
+ Có thể là một tệp duy nhất cho mỗi ngôn ngữ hoặc theo từng namespace:
213
+
214
+ ```ts fileName="intlayer.config.ts"
215
+ plugins: [
216
+ syncJSON({
217
+ source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`, // nguồn tệp JSON đồng bộ theo khóa và ngôn ngữ
218
+ }),
219
+ ];
220
+ ```
221
+
222
+ ## CLI
223
+
224
+ Các tệp JSON được đồng bộ sẽ được coi như các tệp `.content` khác. Điều đó có nghĩa là tất cả các lệnh intlayer sẽ có sẵn cho các tệp JSON được đồng bộ. Bao gồm:
225
+
226
+ - `intlayer content test` để kiểm tra xem có bản dịch nào bị thiếu không
227
+ - `intlayer content list` để liệt kê các tệp JSON được đồng bộ
228
+ - `intlayer content fill` để điền các bản dịch bị thiếu
229
+ - `intlayer content push` để đẩy các tệp JSON được đồng bộ lên
230
+ - `intlayer content pull` để kéo các tệp JSON được đồng bộ về
231
+
232
+ Xem [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/intlayer_cli.md) để biết thêm chi tiết.
233
+
234
+ ## Hạn chế (hiện tại)
235
+
236
+ - Không hỗ trợ chèn hoặc số nhiều/ICU khi nhắm mục tiêu các thư viện bên thứ ba.
237
+ - Trình chỉnh sửa trực quan chưa có sẵn cho các runtime không phải Intlayer.
238
+ - Chỉ đồng bộ JSON; không hỗ trợ các định dạng danh mục không phải JSON.
239
+
240
+ ## Tại sao điều này quan trọng
241
+
242
+ - Chúng ta có thể đề xuất các giải pháp i18n đã được thiết lập và định vị Intlayer như một tiện ích bổ sung.
243
+ - Chúng ta tận dụng SEO/từ khóa của họ với các hướng dẫn kết thúc bằng việc gợi ý sử dụng Intlayer để quản lý JSON.
244
+ - Mở rộng đối tượng người dùng từ “dự án mới” sang “bất kỳ nhóm nào đã sử dụng i18n”.
@@ -0,0 +1,244 @@
1
+ ---
2
+ createdAt: 2025-03-13
3
+ updatedAt: 2025-10-05
4
+ title: 同步 JSON 插件
5
+ description: 将 Intlayer 字典与第三方 i18n JSON 文件(如 i18next、next-intl、react-intl、vue-i18n 等)同步。保持您现有的 i18n,同时使用 Intlayer 管理、翻译和测试您的消息。
6
+ keywords:
7
+ - Intlayer
8
+ - 同步 JSON
9
+ - i18next
10
+ - next-intl
11
+ - react-intl
12
+ - vue-i18n
13
+ - next-translate
14
+ - nuxt-i18n
15
+ - LinguiJS
16
+ - Polyglot.js
17
+ - Solid-i18next
18
+ - svelte-i18n
19
+ - i18n
20
+ - 翻译
21
+ slugs:
22
+ - doc
23
+ - plugin
24
+ - sync-json
25
+ history:
26
+ - version: 6.1.6
27
+ date: 2025-10-05
28
+ changes: 初始同步 JSON 插件文档
29
+ ---
30
+
31
+ ## 同步 JSON(i18n 桥接)
32
+
33
+ 将 Intlayer 作为您现有 i18n 体系的附加组件使用。此插件可使您的 JSON 消息与 Intlayer 字典保持同步,从而您可以:
34
+
35
+ - 继续使用 i18next、next-intl、react-intl、vue-i18n、next-translate、nuxt-i18n、Solid-i18next、svelte-i18n 等。
36
+ - 使用 Intlayer(CLI、CI、提供者、CMS)管理和翻译您的消息,而无需重构您的应用程序。
37
+ - 发布针对各生态系统的教程和 SEO 内容,同时推荐 Intlayer 作为 JSON 管理层。
38
+
39
+ 注意事项及当前范围:
40
+
41
+ - 外部化到 CMS 适用于翻译和经典文本。
42
+ - 目前尚不支持插入、复数/ICU 或其他库的高级运行时功能。
43
+ - 视觉编辑器尚不支持第三方 i18n 输出。
44
+
45
+ ### 何时使用此插件
46
+
47
+ - 您已经使用了一个 i18n 库并将消息存储在 JSON 文件中。
48
+ - 您希望在不更改渲染运行时的情况下,实现 AI 辅助填充、CI 测试和内容运营。
49
+
50
+ ## 安装
51
+
52
+ ```bash
53
+ pnpm add -D @intlayer/sync-json-plugin
54
+ # 或者
55
+ npm i -D @intlayer/sync-json-plugin
56
+ ```
57
+
58
+ ## 快速开始
59
+
60
+ 将插件添加到您的 `intlayer.config.ts` 中,并指向您现有的 JSON 结构。
61
+
62
+ ```ts fileName="intlayer.config.ts"
63
+ import { defineConfig, Locales } from "intlayer";
64
+ import { syncJSON } from "@intlayer/sync-json-plugin";
65
+
66
+ export default defineConfig({
67
+ internationalization: {
68
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
69
+ defaultLocale: Locales.ENGLISH,
70
+ },
71
+
72
+ // 保持您当前的 JSON 文件与 Intlayer 字典同步
73
+ plugins: [
74
+ syncJSON({
75
+ // 每个语言环境,每个命名空间的布局(例如,next-intl,带命名空间的 i18next)
76
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
77
+ }),
78
+ ],
79
+ });
80
+ ```
81
+
82
+ 替代方案:每个语言环境一个文件(常见于 i18next/react-intl 设置):
83
+
84
+ ```ts fileName="intlayer.config.ts"
85
+ plugins: [
86
+ syncJSON({
87
+ source: ({ locale }) => `./locales/${locale}.json`,
88
+ }),
89
+ ];
90
+ ```
91
+
92
+ ### 工作原理
93
+
94
+ - 读取:插件从您的 `source` 构建器发现 JSON 文件,并将其加载为 Intlayer 字典。
95
+ - 写入:在构建和填充之后,它将本地化的 JSON 写回相同路径(末尾带有换行符以避免格式问题)。
96
+ - 自动填充:该插件为每个词典声明一个 `autoFill` 路径。运行 `intlayer fill` 默认只会更新 JSON 文件中缺失的翻译。
97
+
98
+ API:
99
+
100
+ ```ts
101
+ syncJSON({
102
+ source: ({ key, locale }) => string, // 必填
103
+ location?: string, // 可选标签,默认值:"plugin"
104
+ priority?: number, // 可选优先级,用于冲突解决,默认值:0
105
+ });
106
+ ```
107
+
108
+ ## 多个 JSON 源和优先级
109
+
110
+ 你可以添加多个 `syncJSON` 插件来同步不同的 JSON 源。当你的项目中使用多个 i18n 库或有不同的 JSON 结构时,这非常有用。
111
+
112
+ ### 优先级系统
113
+
114
+ 当多个插件针对同一个词典键时,`priority` 参数决定哪个插件优先:
115
+
116
+ - 数值越高的优先级胜出
117
+ - `.content` 文件的默认优先级是 `0`
118
+ - 插件内容文件的默认优先级是 `-1`
119
+ - 具有相同优先级的插件按它们在配置中出现的顺序处理
120
+
121
+ ```ts fileName="intlayer.config.ts"
122
+ import { defineConfig, Locales } from "intlayer";
123
+ import { syncJSON } from "@intlayer/sync-json-plugin";
124
+
125
+ export default defineConfig({
126
+ internationalization: {
127
+ locales: [Locales.ENGLISH, Locales.FRENCH],
128
+ defaultLocale: Locales.ENGLISH,
129
+ },
130
+
131
+ plugins: [
132
+ // 主要 JSON 源(最高优先级)
133
+ syncJSON({
134
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
135
+ location: "main-translations",
136
+ priority: 10,
137
+ }),
138
+
139
+ // 备用 JSON 源(较低优先级)
140
+ syncJSON({
141
+ source: ({ locale }) => `./fallback-locales/${locale}.json`,
142
+ location: "fallback-translations",
143
+ priority: 5,
144
+ }),
145
+
146
+ // 旧版 JSON 源(最低优先级)
147
+ syncJSON({
148
+ source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.json`,
149
+ location: "legacy-translations",
150
+ priority: 1,
151
+ }),
152
+ ],
153
+ });
154
+ ```
155
+
156
+ ### 冲突解决
157
+
158
+ 当相同的翻译键存在于多个 JSON 源中时:
159
+
160
+ 1. 优先级最高的插件决定最终的值
161
+ 2. 优先级较低的源作为缺失键的备用
162
+ 3. 这允许您在逐步迁移到新结构的同时,保持旧版翻译
163
+
164
+ ## 集成
165
+
166
+ 以下是常见的映射。保持您的运行时不变;只需添加插件。
167
+
168
+ ### i18next
169
+
170
+ 典型的文件布局:`./public/locales/{locale}/{namespace}.json` 或 `./locales/{locale}/{namespace}.json`。
171
+
172
+ ```ts fileName="intlayer.config.ts"
173
+ import { syncJSON } from "@intlayer/sync-json-plugin";
174
+
175
+ export default {
176
+ plugins: [
177
+ syncJSON({
178
+ source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
179
+ }),
180
+ ],
181
+ };
182
+ ```
183
+
184
+ ### next-intl
185
+
186
+ 每个语言环境的 JSON 消息(通常是 `./messages/{locale}.json`)或按命名空间划分。
187
+
188
+ ```ts fileName="intlayer.config.ts"
189
+ plugins: [
190
+ syncJSON({
191
+ source: ({ locale, key }) => `./messages/${locale}/${key}.json`,
192
+ }),
193
+ ];
194
+ ```
195
+
196
+ 另见:`docs/zh/intlayer_with_next-intl.md`。
197
+
198
+ ### react-intl
199
+
200
+ 每个语言环境单个 JSON 文件较为常见:
201
+
202
+ ```ts fileName="intlayer.config.ts"
203
+ plugins: [
204
+ syncJSON({
205
+ source: ({ locale }) => `./locales/${locale}.json`,
206
+ }),
207
+ ];
208
+ ```
209
+
210
+ ### vue-i18n
211
+
212
+ 每个语言环境使用单个文件或每个命名空间使用单个文件:
213
+
214
+ ```ts fileName="intlayer.config.ts"
215
+ plugins: [
216
+ syncJSON({
217
+ source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`,
218
+ }),
219
+ ];
220
+ ```
221
+
222
+ ## CLI
223
+
224
+ 同步的 JSON 文件将被视为其他 `.content` 文件。这意味着所有 intlayer 命令都可以用于同步的 JSON 文件,包括:
225
+
226
+ - `intlayer content test` 用于测试是否有缺失的翻译
227
+ - `intlayer content list` 用于列出同步的 JSON 文件
228
+ - `intlayer content fill` 用于填充缺失的翻译
229
+ - `intlayer content push` 用于推送同步的 JSON 文件
230
+ - `intlayer content pull` 用于拉取同步的 JSON 文件
231
+
232
+ 请参阅[Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_cli.md)了解更多详情。
233
+
234
+ ## 限制(当前)
235
+
236
+ - 针对第三方库时不支持插入或复数/ICU。
237
+ - 非 Intlayer 运行时尚不支持可视化编辑器。
238
+ - 仅支持 JSON 同步;不支持非 JSON 目录格式。
239
+
240
+ ## 重要性
241
+
242
+ - 我们可以推荐成熟的 i18n 解决方案,并将 Intlayer 定位为附加组件。
243
+ - 通过教程利用它们的 SEO/关键词,教程最后建议使用 Intlayer 来管理 JSON。
244
+ - 将可覆盖的用户群从“新项目”扩展到“任何已经使用 i18n 的团队”。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intlayer/docs",
3
- "version": "7.0.4-canary.0",
3
+ "version": "7.0.5",
4
4
  "private": false,
5
5
  "description": "Intlayer documentation",
6
6
  "keywords": [
@@ -69,17 +69,17 @@
69
69
  "watch": "webpack --config ./webpack.config.ts --watch"
70
70
  },
71
71
  "dependencies": {
72
- "@intlayer/config": "workspace:*",
73
- "@intlayer/core": "workspace:*",
74
- "@intlayer/types": "workspace:*"
72
+ "@intlayer/config": "7.0.5",
73
+ "@intlayer/core": "7.0.5",
74
+ "@intlayer/types": "7.0.5"
75
75
  },
76
76
  "devDependencies": {
77
- "@intlayer/api": "workspace:*",
78
- "@intlayer/cli": "workspace:*",
77
+ "@intlayer/api": "7.0.5",
78
+ "@intlayer/cli": "7.0.5",
79
79
  "@types/node": "24.9.2",
80
- "@utils/ts-config": "workspace:*",
81
- "@utils/ts-config-types": "workspace:*",
82
- "@utils/tsdown-config": "workspace:*",
80
+ "@utils/ts-config": "7.0.5",
81
+ "@utils/ts-config-types": "7.0.5",
82
+ "@utils/tsdown-config": "7.0.5",
83
83
  "fast-glob": "3.3.3",
84
84
  "rimraf": "6.0.1",
85
85
  "tsdown": "0.15.11",
@@ -87,11 +87,11 @@
87
87
  "vitest": "4.0.5"
88
88
  },
89
89
  "peerDependencies": {
90
- "@intlayer/api": "workspace:*",
91
- "@intlayer/cli": "workspace:*",
92
- "@intlayer/config": "workspace:*",
93
- "@intlayer/core": "workspace:*",
94
- "@intlayer/types": "workspace:*"
90
+ "@intlayer/api": "7.0.5",
91
+ "@intlayer/cli": "7.0.5",
92
+ "@intlayer/config": "7.0.5",
93
+ "@intlayer/core": "7.0.5",
94
+ "@intlayer/types": "7.0.5"
95
95
  },
96
96
  "engines": {
97
97
  "node": ">=14.18"