@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.
Files changed (145) hide show
  1. package/blog/ar/intlayer_with_i18next.md +72 -19
  2. package/blog/ar/intlayer_with_next-i18next.md +61 -36
  3. package/blog/ar/intlayer_with_next-intl.md +61 -13
  4. package/blog/ar/intlayer_with_react-i18next.md +67 -18
  5. package/blog/ar/intlayer_with_react-intl.md +66 -13
  6. package/blog/ar/intlayer_with_vue-i18n.md +180 -0
  7. package/blog/de/intlayer_with_i18next.md +61 -26
  8. package/blog/de/intlayer_with_next-i18next.md +66 -17
  9. package/blog/de/intlayer_with_next-intl.md +62 -13
  10. package/blog/de/intlayer_with_react-i18next.md +66 -17
  11. package/blog/de/intlayer_with_react-intl.md +66 -14
  12. package/blog/de/intlayer_with_vue-i18n.md +178 -0
  13. package/blog/en/intlayer_with_i18next.md +53 -2
  14. package/blog/en/intlayer_with_next-i18next.md +52 -16
  15. package/blog/en/intlayer_with_next-intl.md +49 -0
  16. package/blog/en/intlayer_with_react-i18next.md +50 -1
  17. package/blog/en/intlayer_with_react-intl.md +53 -0
  18. package/blog/en/intlayer_with_vue-i18n.md +178 -0
  19. package/blog/en-GB/intlayer_with_i18next.md +58 -7
  20. package/blog/en-GB/intlayer_with_next-i18next.md +55 -9
  21. package/blog/en-GB/intlayer_with_next-intl.md +55 -6
  22. package/blog/en-GB/intlayer_with_react-i18next.md +55 -6
  23. package/blog/en-GB/intlayer_with_react-intl.md +56 -3
  24. package/blog/en-GB/intlayer_with_vue-i18n.md +180 -0
  25. package/blog/es/intlayer_with_i18next.md +69 -18
  26. package/blog/es/intlayer_with_next-i18next.md +70 -24
  27. package/blog/es/intlayer_with_next-intl.md +64 -13
  28. package/blog/es/intlayer_with_react-i18next.md +61 -12
  29. package/blog/es/intlayer_with_react-intl.md +65 -12
  30. package/blog/es/intlayer_with_vue-i18n.md +178 -0
  31. package/blog/fr/intlayer_with_i18next.md +77 -16
  32. package/blog/fr/intlayer_with_next-i18next.md +55 -31
  33. package/blog/fr/intlayer_with_next-intl.md +57 -7
  34. package/blog/fr/intlayer_with_react-i18next.md +64 -7
  35. package/blog/fr/intlayer_with_react-intl.md +63 -10
  36. package/blog/fr/intlayer_with_vue-i18n.md +178 -0
  37. package/blog/hi/intlayer_with_i18next.md +67 -16
  38. package/blog/hi/intlayer_with_next-i18next.md +69 -23
  39. package/blog/hi/intlayer_with_next-intl.md +61 -8
  40. package/blog/hi/intlayer_with_react-i18next.md +63 -14
  41. package/blog/hi/intlayer_with_react-intl.md +66 -13
  42. package/blog/hi/intlayer_with_vue-i18n.md +180 -0
  43. package/blog/id/intlayer_with_i18next.md +65 -14
  44. package/blog/id/intlayer_with_next-i18next.md +58 -12
  45. package/blog/id/intlayer_with_next-intl.md +60 -11
  46. package/blog/id/intlayer_with_react-i18next.md +59 -10
  47. package/blog/id/intlayer_with_react-intl.md +66 -13
  48. package/blog/id/intlayer_with_vue-i18n.md +178 -0
  49. package/blog/it/intlayer_with_i18next.md +70 -19
  50. package/blog/it/intlayer_with_next-i18next.md +68 -22
  51. package/blog/it/intlayer_with_next-intl.md +62 -12
  52. package/blog/it/intlayer_with_react-i18next.md +65 -16
  53. package/blog/it/intlayer_with_react-intl.md +67 -14
  54. package/blog/it/intlayer_with_vue-i18n.md +178 -0
  55. package/blog/ja/intlayer_with_i18next.md +74 -24
  56. package/blog/ja/intlayer_with_next-i18next.md +60 -37
  57. package/blog/ja/intlayer_with_next-intl.md +63 -15
  58. package/blog/ja/intlayer_with_react-i18next.md +70 -21
  59. package/blog/ja/intlayer_with_react-intl.md +73 -21
  60. package/blog/ja/intlayer_with_vue-i18n.md +180 -0
  61. package/blog/ko/intlayer_with_i18next.md +60 -29
  62. package/blog/ko/intlayer_with_next-i18next.md +59 -32
  63. package/blog/ko/intlayer_with_next-intl.md +52 -23
  64. package/blog/ko/intlayer_with_react-i18next.md +65 -16
  65. package/blog/ko/intlayer_with_react-intl.md +74 -22
  66. package/blog/ko/intlayer_with_vue-i18n.md +180 -0
  67. package/blog/pl/intlayer_with_i18next.md +63 -12
  68. package/blog/pl/intlayer_with_next-i18next.md +74 -17
  69. package/blog/pl/intlayer_with_next-intl.md +59 -8
  70. package/blog/pl/intlayer_with_react-i18next.md +59 -10
  71. package/blog/pl/intlayer_with_react-intl.md +65 -12
  72. package/blog/pl/intlayer_with_vue-i18n.md +180 -0
  73. package/blog/pt/intlayer_with_i18next.md +67 -16
  74. package/blog/pt/intlayer_with_next-i18next.md +65 -19
  75. package/blog/pt/intlayer_with_next-intl.md +62 -12
  76. package/blog/pt/intlayer_with_react-i18next.md +67 -18
  77. package/blog/pt/intlayer_with_react-intl.md +62 -10
  78. package/blog/pt/intlayer_with_vue-i18n.md +178 -0
  79. package/blog/ru/intlayer_with_i18next.md +68 -15
  80. package/blog/ru/intlayer_with_next-i18next.md +71 -25
  81. package/blog/ru/intlayer_with_next-intl.md +56 -7
  82. package/blog/ru/intlayer_with_react-i18next.md +65 -16
  83. package/blog/ru/intlayer_with_react-intl.md +69 -16
  84. package/blog/ru/intlayer_with_vue-i18n.md +180 -0
  85. package/blog/tr/intlayer_with_i18next.md +67 -16
  86. package/blog/tr/intlayer_with_next-i18next.md +78 -21
  87. package/blog/tr/intlayer_with_next-intl.md +69 -18
  88. package/blog/tr/intlayer_with_react-i18next.md +65 -16
  89. package/blog/tr/intlayer_with_react-intl.md +71 -19
  90. package/blog/tr/intlayer_with_vue-i18n.md +180 -0
  91. package/blog/vi/intlayer_with_i18next.md +64 -13
  92. package/blog/vi/intlayer_with_next-i18next.md +72 -26
  93. package/blog/vi/intlayer_with_next-intl.md +62 -11
  94. package/blog/vi/intlayer_with_react-i18next.md +66 -17
  95. package/blog/vi/intlayer_with_react-intl.md +70 -17
  96. package/blog/vi/intlayer_with_vue-i18n.md +180 -0
  97. package/blog/zh/intlayer_with_i18next.md +67 -17
  98. package/blog/zh/intlayer_with_next-i18next.md +67 -22
  99. package/blog/zh/intlayer_with_next-intl.md +61 -13
  100. package/blog/zh/intlayer_with_react-i18next.md +67 -18
  101. package/blog/zh/intlayer_with_react-intl.md +69 -17
  102. package/blog/zh/intlayer_with_vue-i18n.md +180 -0
  103. package/dist/cjs/generated/blog.entry.cjs +19 -0
  104. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  105. package/dist/esm/generated/blog.entry.mjs +19 -0
  106. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  107. package/dist/types/generated/blog.entry.d.ts +1 -0
  108. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  109. package/docs/ar/intlayer_with_nextjs_15.md +36 -9
  110. package/docs/ar/intlayer_with_nextjs_16.md +36 -9
  111. package/docs/de/intlayer_with_nextjs_15.md +36 -9
  112. package/docs/de/intlayer_with_nextjs_16.md +24 -6
  113. package/docs/en/intlayer_with_nextjs_14.md +37 -9
  114. package/docs/en/intlayer_with_nextjs_15.md +40 -10
  115. package/docs/en/intlayer_with_nextjs_16.md +40 -10
  116. package/docs/en/plugins/sync-json.md +152 -55
  117. package/docs/en/releases/v7.md +1 -1
  118. package/docs/en-GB/intlayer_with_nextjs_15.md +36 -9
  119. package/docs/en-GB/intlayer_with_nextjs_16.md +36 -9
  120. package/docs/en-GB/releases/v7.md +1 -1
  121. package/docs/es/intlayer_with_nextjs_15.md +36 -9
  122. package/docs/es/intlayer_with_nextjs_16.md +36 -9
  123. package/docs/fr/intlayer_with_nextjs_15.md +36 -9
  124. package/docs/fr/intlayer_with_nextjs_16.md +37 -24
  125. package/docs/hi/intlayer_with_nextjs_15.md +36 -9
  126. package/docs/hi/intlayer_with_nextjs_16.md +36 -9
  127. package/docs/id/intlayer_with_nextjs_16.md +36 -9
  128. package/docs/it/intlayer_with_nextjs_15.md +36 -9
  129. package/docs/it/intlayer_with_nextjs_16.md +36 -9
  130. package/docs/ja/intlayer_with_nextjs_15.md +36 -9
  131. package/docs/ja/intlayer_with_nextjs_16.md +36 -9
  132. package/docs/ko/intlayer_with_nextjs_15.md +36 -9
  133. package/docs/ko/intlayer_with_nextjs_16.md +36 -9
  134. package/docs/pl/intlayer_with_nextjs_16.md +36 -9
  135. package/docs/pt/intlayer_with_nextjs_15.md +36 -9
  136. package/docs/pt/intlayer_with_nextjs_16.md +36 -9
  137. package/docs/ru/intlayer_with_nextjs_15.md +36 -9
  138. package/docs/ru/intlayer_with_nextjs_16.md +36 -9
  139. package/docs/tr/intlayer_with_nextjs_15.md +36 -9
  140. package/docs/tr/intlayer_with_nextjs_16.md +39 -21
  141. package/docs/vi/intlayer_with_nextjs_16.md +36 -9
  142. package/docs/zh/intlayer_with_nextjs_15.md +36 -9
  143. package/docs/zh/intlayer_with_nextjs_16.md +36 -9
  144. package/package.json +14 -14
  145. 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-10-29
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
- 请参阅我们博客文章中的具体比较:[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)。
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
- ## 为什么要将 Intlayer 与 i18next 结合使用?
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 的适配器来实现,帮助您在 CLI 或 CI/CD 流水线中自动化 JSON 翻译,测试翻译内容等。**
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
- ### 步骤 2:实现 Intlayer 插件以包装 JSON
83
+ ### 2步:实现 Intlayer 插件以封装 JSON
76
84
 
77
85
  创建一个 Intlayer 配置文件以定义支持的语言环境:
78
86
 
79
- **如果你还想导出 i18next 的 JSON 词典**,请添加 `syncJSON` 插件:
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 }) => `./intl/messages/${locale}/${key}.json`,
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
- 1. 加载 JSON 和内容声明文件,并将它们转换为 intlayer 字典。
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
- 2. 如果 JSON 文件和内容声明文件之间存在冲突,Intlayer 将合并所有字典。合并的优先级取决于插件的优先级以及内容声明文件的优先级(所有这些都是可配置的)。
158
+ 这将加载 `src` 目录中所有匹配 `{key}.i18n.json` 模式的 JSON 文件,并将它们作为 Intlayer 字典加载。
107
159
 
108
- 如果使用 CLI 翻译 JSON,或使用 CMS 进行更改,Intlayer 会使用新的翻译更新 JSON 文件。
160
+ ---
109
161
 
110
162
  ## Git 配置
111
163
 
@@ -120,8 +172,6 @@ export default config;
120
172
 
121
173
  ### VS Code 扩展
122
174
 
123
- 为了提升开发者体验,请安装官方的 **Intlayer VS Code 扩展**:
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 国际化(i18n
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 需要多个配置文件,并且需要仔细设置服务器端和客户端的 i18n 实例。
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
- 请参阅我们博客文章中的具体对比:[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)。
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 提供了一个出色的独立 i18n 解决方案(请参阅我们的[Next.js 集成指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_with_nextjs_16.md)),但您可能出于以下几个原因希望将其与 next-i18next 结合使用:
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 的适配器来实现,帮助在 CLI 或 CI/CD 流水线中自动化您的 JSON 翻译,测试您的翻译内容等。**
58
+ **为此,Intlayer 可以作为 next-i18next 的适配器来实现,帮助你在 CLI 或 CI/CD 流水线中自动化处理 JSON 翻译,测试你的翻译内容,等等。**
56
59
 
57
- 本指南将向您展示如何利用 Intlayer 优越的内容声明系统,同时保持与 next-i18next 的兼容性。
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
- - **next-intlayer**:带有构建插件的 Next.js 集成层
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
- **如果你还想为 i18next 导出 JSON 词典**,请添加 `syncJSON` 插件:
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 }) => `./messages/${locale}/${key}.json`,
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. **现有代码库**:您已经有了成熟的 next-intl 实现,并希望逐步迁移到 Intlayer 以获得更好的开发者体验。
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 兼容的 JSON 格式的插件
67
+ - **@intlayer/sync-json-plugin**:用于将 Intlayer 内容声明导出为 next-intl 兼容 JSON 格式的插件
61
68
 
62
- ### 第2步:实现 Intlayer 插件以包装 JSON
69
+ ### 第2步:实现 Intlayer 插件以封装 JSON
63
70
 
64
71
  创建一个 Intlayer 配置文件以定义支持的语言环境:
65
72
 
66
- **如果您还想导出适用于 next-intl JSON 字典**,请添加 `syncJSON` 插件:
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` 插件会自动包装 JSON。它会读取和写入 JSON 文件,而不会改变内容结构。
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
- 如果使用 CLI 翻译 JSON 或使用 CMS 进行更改,Intlayer 会使用新的翻译更新 JSON 文件。
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)