@intlayer/docs 9.2.0 → 9.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/README.md +24 -24
  2. package/blog/ar/index.md +1 -1
  3. package/blog/ar/rag_powered_documentation_assistant.md +1 -1
  4. package/blog/de/index.md +1 -1
  5. package/blog/en/index.md +1 -1
  6. package/blog/en-GB/index.md +1 -1
  7. package/blog/es/index.md +1 -1
  8. package/blog/fr/index.md +1 -1
  9. package/blog/hi/index.md +1 -1
  10. package/blog/id/index.md +1 -1
  11. package/blog/it/index.md +1 -1
  12. package/blog/ja/index.md +1 -1
  13. package/blog/ko/index.md +1 -1
  14. package/blog/pl/index.md +1 -1
  15. package/blog/pl/rag_powered_documentation_assistant.md +1 -1
  16. package/blog/pt/index.md +1 -1
  17. package/blog/ru/index.md +1 -1
  18. package/blog/uk/index.md +1 -1
  19. package/blog/vi/index.md +1 -1
  20. package/blog/zh/index.md +1 -1
  21. package/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -2
  22. package/dist/cjs/authors2.cjs +0 -1
  23. package/dist/cjs/common.cjs +24 -1
  24. package/dist/cjs/common.cjs.map +1 -1
  25. package/dist/cjs/generated/blog.entry.cjs +35 -6
  26. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  27. package/dist/cjs/generated/docs.entry.cjs +35 -6
  28. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  29. package/dist/cjs/generated/frequentQuestions.entry.cjs +35 -6
  30. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  31. package/dist/cjs/generated/legal.entry.cjs +35 -6
  32. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  33. package/dist/esm/common.mjs +24 -1
  34. package/dist/esm/common.mjs.map +1 -1
  35. package/dist/esm/generated/blog.entry.mjs +35 -6
  36. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  37. package/dist/esm/generated/docs.entry.mjs +35 -6
  38. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  39. package/dist/esm/generated/frequentQuestions.entry.mjs +35 -6
  40. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  41. package/dist/esm/generated/legal.entry.mjs +35 -6
  42. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  43. package/dist/types/common.d.ts.map +1 -1
  44. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  45. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  46. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  47. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  48. package/docs/ar/bundle_optimization.md +58 -25
  49. package/docs/ar/configuration.md +10 -10
  50. package/docs/ar/interest_of_intlayer.md +24 -22
  51. package/docs/ar/intlayer_with_express.md +1 -1
  52. package/docs/ar/intlayer_with_svelte_kit.md +1 -1
  53. package/docs/ar/intlayer_with_tanstack+solid.md +5 -3
  54. package/docs/ar/intlayer_with_tanstack.md +5 -3
  55. package/docs/ar/live-sync.md +4 -0
  56. package/docs/ar/lsp.md +114 -175
  57. package/docs/ar/readme.md +25 -25
  58. package/docs/bn/bundle_optimization.md +58 -25
  59. package/docs/bn/configuration.md +10 -10
  60. package/docs/bn/interest_of_intlayer.md +24 -22
  61. package/docs/cs/bundle_optimization.md +58 -25
  62. package/docs/cs/configuration.md +10 -10
  63. package/docs/cs/interest_of_intlayer.md +24 -22
  64. package/docs/de/bundle_optimization.md +58 -25
  65. package/docs/de/configuration.md +10 -10
  66. package/docs/de/interest_of_intlayer.md +24 -22
  67. package/docs/de/intlayer_with_svelte_kit.md +1 -1
  68. package/docs/de/intlayer_with_tanstack+solid.md +5 -3
  69. package/docs/de/intlayer_with_tanstack.md +5 -3
  70. package/docs/de/live-sync.md +4 -0
  71. package/docs/de/lsp.md +111 -172
  72. package/docs/de/readme.md +24 -24
  73. package/docs/en/bundle_optimization.md +51 -23
  74. package/docs/en/configuration.md +10 -10
  75. package/docs/en/interest_of_intlayer.md +24 -22
  76. package/docs/en/intlayer_with_svelte_kit.md +1 -1
  77. package/docs/en/intlayer_with_tanstack+solid.md +5 -3
  78. package/docs/en/intlayer_with_tanstack.md +5 -3
  79. package/docs/en/live-sync.md +4 -0
  80. package/docs/en/lsp.md +109 -170
  81. package/docs/en/readme.md +24 -24
  82. package/docs/en-GB/bundle_optimization.md +58 -25
  83. package/docs/en-GB/configuration.md +10 -10
  84. package/docs/en-GB/interest_of_intlayer.md +24 -22
  85. package/docs/en-GB/intlayer_with_svelte_kit.md +1 -1
  86. package/docs/en-GB/intlayer_with_tanstack+solid.md +5 -3
  87. package/docs/en-GB/intlayer_with_tanstack.md +5 -3
  88. package/docs/en-GB/live-sync.md +4 -0
  89. package/docs/en-GB/lsp.md +109 -170
  90. package/docs/en-GB/readme.md +24 -24
  91. package/docs/es/bundle_optimization.md +58 -25
  92. package/docs/es/configuration.md +10 -10
  93. package/docs/es/interest_of_intlayer.md +24 -22
  94. package/docs/es/intlayer_with_svelte_kit.md +1 -1
  95. package/docs/es/intlayer_with_tanstack+solid.md +5 -3
  96. package/docs/es/intlayer_with_tanstack.md +5 -3
  97. package/docs/es/live-sync.md +4 -0
  98. package/docs/es/lsp.md +114 -175
  99. package/docs/es/readme.md +24 -24
  100. package/docs/fr/bundle_optimization.md +58 -25
  101. package/docs/fr/configuration.md +10 -10
  102. package/docs/fr/interest_of_intlayer.md +24 -22
  103. package/docs/fr/intlayer_with_svelte_kit.md +1 -1
  104. package/docs/fr/intlayer_with_tanstack+solid.md +5 -3
  105. package/docs/fr/intlayer_with_tanstack.md +5 -3
  106. package/docs/fr/live-sync.md +4 -0
  107. package/docs/fr/lsp.md +110 -171
  108. package/docs/fr/readme.md +24 -24
  109. package/docs/hi/bundle_optimization.md +58 -25
  110. package/docs/hi/configuration.md +10 -10
  111. package/docs/hi/interest_of_intlayer.md +24 -22
  112. package/docs/hi/intlayer_with_express.md +1 -1
  113. package/docs/hi/intlayer_with_svelte_kit.md +1 -1
  114. package/docs/hi/intlayer_with_tanstack+solid.md +5 -3
  115. package/docs/hi/intlayer_with_tanstack.md +5 -3
  116. package/docs/hi/live-sync.md +4 -0
  117. package/docs/hi/lsp.md +113 -174
  118. package/docs/hi/readme.md +24 -24
  119. package/docs/id/bundle_optimization.md +58 -25
  120. package/docs/id/configuration.md +10 -10
  121. package/docs/id/interest_of_intlayer.md +24 -22
  122. package/docs/id/intlayer_with_svelte_kit.md +1 -1
  123. package/docs/id/intlayer_with_tanstack+solid.md +5 -3
  124. package/docs/id/intlayer_with_tanstack.md +5 -3
  125. package/docs/id/live-sync.md +4 -0
  126. package/docs/id/lsp.md +113 -174
  127. package/docs/id/readme.md +24 -24
  128. package/docs/it/bundle_optimization.md +58 -25
  129. package/docs/it/configuration.md +10 -10
  130. package/docs/it/interest_of_intlayer.md +24 -22
  131. package/docs/it/intlayer_with_svelte_kit.md +1 -1
  132. package/docs/it/intlayer_with_tanstack+solid.md +5 -3
  133. package/docs/it/intlayer_with_tanstack.md +5 -3
  134. package/docs/it/live-sync.md +4 -0
  135. package/docs/it/lsp.md +115 -176
  136. package/docs/it/readme.md +24 -24
  137. package/docs/ja/bundle_optimization.md +58 -25
  138. package/docs/ja/configuration.md +10 -10
  139. package/docs/ja/interest_of_intlayer.md +24 -22
  140. package/docs/ja/intlayer_with_tanstack+solid.md +5 -3
  141. package/docs/ja/intlayer_with_tanstack.md +5 -3
  142. package/docs/ja/live-sync.md +4 -0
  143. package/docs/ja/lsp.md +113 -174
  144. package/docs/ja/readme.md +24 -24
  145. package/docs/ko/bundle_optimization.md +58 -25
  146. package/docs/ko/configuration.md +10 -10
  147. package/docs/ko/interest_of_intlayer.md +24 -22
  148. package/docs/ko/intlayer_with_svelte_kit.md +1 -1
  149. package/docs/ko/intlayer_with_tanstack+solid.md +5 -3
  150. package/docs/ko/intlayer_with_tanstack.md +5 -3
  151. package/docs/ko/live-sync.md +4 -0
  152. package/docs/ko/lsp.md +112 -173
  153. package/docs/ko/readme.md +24 -24
  154. package/docs/nl/bundle_optimization.md +58 -25
  155. package/docs/nl/configuration.md +10 -10
  156. package/docs/nl/interest_of_intlayer.md +24 -22
  157. package/docs/pl/bundle_optimization.md +58 -25
  158. package/docs/pl/configuration.md +10 -10
  159. package/docs/pl/interest_of_intlayer.md +4 -2
  160. package/docs/pl/intlayer_with_svelte_kit.md +1 -1
  161. package/docs/pl/intlayer_with_tanstack+solid.md +5 -3
  162. package/docs/pl/intlayer_with_tanstack.md +5 -3
  163. package/docs/pl/live-sync.md +4 -0
  164. package/docs/pl/lsp.md +115 -176
  165. package/docs/pl/readme.md +24 -24
  166. package/docs/pt/bundle_optimization.md +58 -24
  167. package/docs/pt/configuration.md +10 -10
  168. package/docs/pt/interest_of_intlayer.md +24 -22
  169. package/docs/pt/intlayer_with_svelte_kit.md +1 -1
  170. package/docs/pt/intlayer_with_tanstack+solid.md +5 -3
  171. package/docs/pt/intlayer_with_tanstack.md +5 -3
  172. package/docs/pt/live-sync.md +4 -0
  173. package/docs/pt/lsp.md +113 -174
  174. package/docs/pt/readme.md +24 -24
  175. package/docs/ru/bundle_optimization.md +58 -25
  176. package/docs/ru/configuration.md +10 -10
  177. package/docs/ru/interest_of_intlayer.md +24 -22
  178. package/docs/ru/intlayer_with_nextjs_14.md +1 -1
  179. package/docs/ru/intlayer_with_nextjs_15.md +1 -1
  180. package/docs/ru/intlayer_with_svelte_kit.md +1 -1
  181. package/docs/ru/intlayer_with_tanstack+solid.md +5 -3
  182. package/docs/ru/intlayer_with_tanstack.md +5 -3
  183. package/docs/ru/live-sync.md +4 -0
  184. package/docs/ru/lsp.md +112 -173
  185. package/docs/ru/readme.md +24 -24
  186. package/docs/tr/bundle_optimization.md +58 -25
  187. package/docs/tr/configuration.md +10 -10
  188. package/docs/tr/interest_of_intlayer.md +24 -22
  189. package/docs/tr/intlayer_with_svelte_kit.md +1 -1
  190. package/docs/tr/intlayer_with_tanstack+solid.md +5 -3
  191. package/docs/tr/intlayer_with_tanstack.md +5 -3
  192. package/docs/tr/live-sync.md +4 -0
  193. package/docs/tr/lsp.md +113 -174
  194. package/docs/tr/readme.md +24 -24
  195. package/docs/uk/bundle_optimization.md +58 -25
  196. package/docs/uk/configuration.md +10 -10
  197. package/docs/uk/interest_of_intlayer.md +4 -2
  198. package/docs/uk/intlayer_with_svelte_kit.md +1 -1
  199. package/docs/uk/intlayer_with_tanstack+solid.md +5 -3
  200. package/docs/uk/intlayer_with_tanstack.md +5 -3
  201. package/docs/uk/live-sync.md +4 -0
  202. package/docs/uk/lsp.md +113 -174
  203. package/docs/uk/per_locale_file.md +1 -1
  204. package/docs/uk/readme.md +24 -24
  205. package/docs/ur/bundle_optimization.md +58 -25
  206. package/docs/ur/configuration.md +10 -10
  207. package/docs/ur/interest_of_intlayer.md +24 -22
  208. package/docs/vi/bundle_optimization.md +58 -25
  209. package/docs/vi/configuration.md +10 -10
  210. package/docs/vi/interest_of_intlayer.md +24 -22
  211. package/docs/vi/intlayer_with_svelte_kit.md +1 -1
  212. package/docs/vi/intlayer_with_tanstack+solid.md +5 -3
  213. package/docs/vi/intlayer_with_tanstack.md +5 -3
  214. package/docs/vi/live-sync.md +4 -0
  215. package/docs/vi/lsp.md +115 -176
  216. package/docs/vi/readme.md +24 -24
  217. package/docs/zh/bundle_optimization.md +58 -25
  218. package/docs/zh/configuration.md +10 -10
  219. package/docs/zh/interest_of_intlayer.md +24 -22
  220. package/docs/zh/intlayer_with_svelte_kit.md +1 -1
  221. package/docs/zh/intlayer_with_tanstack+solid.md +5 -3
  222. package/docs/zh/intlayer_with_tanstack.md +5 -3
  223. package/docs/zh/live-sync.md +4 -0
  224. package/docs/zh/lsp.md +113 -174
  225. package/docs/zh/readme.md +21 -21
  226. package/docs/zh-TW/bundle_optimization.md +58 -25
  227. package/docs/zh-TW/interest_of_intlayer.md +24 -22
  228. package/package.json +7 -7
  229. package/src/common.ts +39 -2
  230. package/src/generated/blog.entry.ts +39 -7
  231. package/src/generated/docs.entry.ts +39 -7
  232. package/src/generated/frequentQuestions.entry.ts +39 -7
  233. package/src/generated/legal.entry.ts +39 -7
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-06-07
3
+ updatedAt: 2026-08-09
4
4
  title: 优化 i18n 打包体积与性能
5
5
  description: 通过优化国际化(i18n)内容来减小应用程序包的大小。了解如何利用 Intlayer 实现字典的 tree shaking 和延迟加载(lazy loading)。
6
6
  keywords:
@@ -16,6 +16,12 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 9.2.1
20
+ date: 2026-08-09
21
+ changes: "`purge` 和 `minify` 现在可通过 `@intlayer/swc` 在 Next.js 上工作 — 无需 `babel.config.js`"
22
+ - version: 8.12.0
23
+ date: 2026-06-24
24
+ changes: "在参考表中按所需的流水线顺序列出 Babel 插件(extract → purge → minify → optimize)"
19
25
  - version: 8.12.0
20
26
  date: 2026-06-07
21
27
  changes: "为 Babel/Webpack 引入了 `intlayerPurgeBabelPlugin` 和 `intlayerMinifyBabelPlugin`,明确了插件管线"
@@ -191,12 +197,14 @@ Intlayer 的构建优化被划分为若干个职责单一的插件。了解它
191
197
 
192
198
  这些被直接运用在基于 Webpack 设置的 `babel.config.js` 当中(比如使用了 Babel 的 Next.js、CRA,或是自定义的 Webpack 等)。
193
199
 
200
+ 下表按所需的流水线顺序列出它们(与它们必须在 `babel.config.js` 中出现的顺序相同):
201
+
194
202
  | 插件 | 功能说明 |
195
203
  | :---------------------------- | :--------------------------------------------------------------------------------------------------- |
196
204
  | `intlayerExtractBabelPlugin` | 扫描 `.content.ts` 文件并把编译好的字典写入 `.intlayer/` |
197
- | `intlayerOptimizeBabelPlugin` | 将 `useIntlayer('key')` 重写为 `useDictionary(hash)` 并注入匹配对应字典的 `import` 语句 |
198
205
  | `intlayerPurgeBabelPlugin` | 扫描所有源代码文件,从已编译的 `.intlayer/**/*.json` 字典文件中删除**未被使用的内容字段** |
199
206
  | `intlayerMinifyBabelPlugin` | **重命名内容字段的键(keys)** 为简短的字母别名(例如 `title` 变成 `a`),作用范围包括 JSON 与源代码 |
207
+ | `intlayerOptimizeBabelPlugin` | 将 `useIntlayer('key')` 重写为 `useDictionary(hash)` 并注入匹配对应字典的 `import` 语句 |
200
208
 
201
209
  > **插件的执行顺序很重要。** 在你的 `babel.config.js` 里,purge 和 minify 的插件必须放置在 optimize 插件**之前**。优化步骤(optimize)会把 `useIntlayer('key')` 替换为模糊的 `useDictionary(hash)`,此举抹除了能够让 purge 和 minify 识别哪些字段被使用过的字典 key 信息。
202
210
 
@@ -205,9 +213,9 @@ Intlayer 的构建优化被划分为若干个职责单一的插件。了解它
205
213
  | 选项助手 | 配套插件 |
206
214
  | :--------------------------- | :---------------------------- |
207
215
  | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
208
- | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
209
216
  | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
210
217
  | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
218
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
211
219
 
212
220
  ### Vite 插件 (`vite-intlayer`)
213
221
 
@@ -220,6 +228,20 @@ Vite 用户**不需要直接对它们进行配置**。当你在 `vite.config.ts`
220
228
  | Dictionary minify | 等同于 `intlayerMinifyBabelPlugin` 的 JSON 写入步骤 |
221
229
  | Babel transform | 等同于 `intlayerMinifyBabelPlugin` 的代码重命名步骤 + `intlayerOptimizeBabelPlugin` |
222
230
 
231
+ ### SWC 插件(`@intlayer/swc`)
232
+
233
+ Next.js 用户同样**从不直接配置这些**。自 **v9.2.1** 起,`next.config.ts` 中的 `withIntlayer()` 仅凭 `build.purge` 和 `build.minify` 两个标志就会运行完整流水线 —— 清除、压缩和导入重写。
234
+
235
+ 工作被分成两部分,因为 SWC Wasm 插件一次只转换一个文件,且无法访问文件系统:
236
+
237
+ | 阶段 | 运行位置 | 作用 |
238
+ | :--------------------------------- | :----------------------------- | :----------------------------------------------------------- |
239
+ | 使用分析 + JSON 清除/压缩 | Node,位于 `withIntlayer()` 内 | 读取每个组件源文件,重写 `.intlayer/**/*.json`,生成重命名表 |
240
+ | 源码重写(`content.title` → `.a`) | `@intlayer/swc`(Wasm) | 将重命名表应用到你代码中对应的属性访问 |
241
+ | 导入重写(`useIntlayer` → dict) | `@intlayer/swc`(Wasm) | 与 `intlayerOptimizeBabelPlugin` 相同 |
242
+
243
+ 判断_哪些_字段未被使用以及每个字段获得_什么_别名,需要跨文件状态和文件 I/O,因此这一半在 Node 中运行;SWC 插件只接收生成的表。
244
+
223
245
  ## 各平台配置指南
224
246
 
225
247
  <Tabs>
@@ -227,10 +249,12 @@ Vite 用户**不需要直接对它们进行配置**。当你在 `vite.config.ts`
227
249
 
228
250
  ### Next.js
229
251
 
230
- Next.js 需要依靠 `@intlayer/swc` 插件来进行优化步骤(导入重写),因为 Next.js 采用 SWC 作为编译器。
252
+ Next.js 需要 `@intlayer/swc` 插件,因为 Next.js 使用 SWC 进行构建。自 **v9.2.1** 起,这一个包即可覆盖整条流水线 —— 优化(导入重写)、清除和压缩。
231
253
 
232
254
  > 该插件并未默认安装,因为 SWC 插件在 Next.js 当中目前仍处于实验阶段。未来这部分有可能会发生改变。
233
255
 
256
+ > **Next.js 16.1.0 是最低版本。** 它是首个基于 SWC 向前兼容 Wasm 插件 ABI 构建的版本;更早的版本会拒绝该插件。`withIntlayer` 会读取你项目的 Next.js 版本,低于 16.1.0 时干脆不注册该插件 —— 这些构建仍会成功,只是在没有打包优化的情况下运行。
257
+
234
258
  <Tabs>
235
259
  <Tab value="npm">
236
260
 
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
265
289
 
266
290
  安装完毕后,Intlayer 将会自动侦测并使用该插件。
267
291
 
268
- 至于**清除(purge)和最小化(minify)**步骤(即字段移除和字段重命名),请连同 `@intlayer/babel` 一并安装并加入 Babel 插件。由于 Next.js 依靠 SWC 处理代码转化,但仍会评估 `babel.config.js` 以决定插件配置,因此上述 Babel 插件能够在进入 SWC 前作为预处理步骤得以执行。
292
+ **清除和压缩**阶段(字段移除与字段重命名)不需要额外的包,也不需要 `babel.config.js`。用 `withIntlayer` 包裹你的配置,并在 `intlayer.config.ts` 中开启相应标志:
269
293
 
270
- ```bash packageManager="npm"
271
- npm install -D @intlayer/babel
294
+ ```typescript fileName="next.config.ts"
295
+ import { withIntlayer } from "next-intlayer/server";
296
+ import type { NextConfig } from "next";
297
+
298
+ const nextConfig: NextConfig = {/* 你的配置 */};
299
+
300
+ export default withIntlayer(nextConfig);
272
301
  ```
273
302
 
274
- ```javascript fileName="babel.config.js"
275
- const {
276
- intlayerPurgeBabelPlugin,
277
- intlayerMinifyBabelPlugin,
278
- getPurgePluginOptions,
279
- getMinifyPluginOptions,
280
- } = require("@intlayer/babel");
303
+ ```typescript fileName="intlayer.config.ts"
304
+ import type { IntlayerConfig } from "intlayer";
281
305
 
282
- module.exports = {
283
- presets: ["next/babel"],
284
- plugins: [
285
- // Purge: 移除 .intlayer/**/*.json 里未被使用的内容字段
286
- [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
287
- // Minify: 对 JSON 以及源代码里的内容字段的键(keys)进行重命名
288
- [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
289
- // 注意: 在这里不需要使用 intlayerOptimizeBabelPlugin,因为
290
- // @intlayer/swc 已经处理了 useIntlayer → useDictionary 的重写过程。
291
- ],
306
+ const config: IntlayerConfig = {
307
+ build: {
308
+ purge: true, // 从打包的 JSON 中移除未使用的内容字段
309
+ minify: true, // 将内容字段键重命名为简短别名
310
+ },
292
311
  };
312
+
313
+ export default config;
293
314
  ```
294
315
 
316
+ 在 `next build` 期间,`withIntlayer` 会分析你的源码、重写已编译的字典,并将生成的字段重命名表传给 `@intlayer/swc`,由它更新你代码中对应的属性访问。
317
+
318
+ > 请使用异步的 `withIntlayer`,而不是 `withIntlayerSync`。同步版本不会运行分析流水线,因此清除和压缩对它没有效果。
319
+
320
+ > 清除和压缩仅在 `next build` 时运行 —— 优化流水线在 `next dev` 期间是关闭的。
321
+
322
+ > 当配置了兼容适配器调用方时它们也会被禁用(`swcExtraCallers`,由 `@intlayer/next-intl`、`@intlayer/react-i18next` 等兼容包设置):这些调用点对使用分析器不可见,因此清除会移除代码仍在读取的字段。导入重写仍保持启用。
323
+
324
+ **更早的版本(9.2.1 之前)** 需要 `@intlayer/babel` 以及一个声明 `intlayerPurgeBabelPlugin` 和 `intlayerMinifyBabelPlugin` 的 `babel.config.js`。该文件不再需要,可以删除。
325
+
295
326
  </Tab>
296
327
  <Tab value="vite">
297
328
 
@@ -447,6 +478,8 @@ export default config;
447
478
 
448
479
  > 如果在 `optimize` 被设为 `false`、又或是启用了可视化编辑器也就是当 `editor.enabled` 设定为了 `true` 时(由于编辑器需要保留字段名称以便做后续处理),重命名这个操作都将会被跳过。
449
480
 
481
+ > 在 Next.js 上,当 `@intlayer/swc` 未安装或无法加载时(Next.js 低于 16.1.0),压缩同样会被跳过。重写源码访问的正是这个插件,因此在没有它的情况下重命名字典,会让你的代码读取已不存在的字段名。
482
+
450
483
  > 同理,如果是利用了 `importMode: 'fetch'` 来载入字段时此过程同样不适用。因为它们的内容会以原始命名由后端 API 所提供,对客户端内容随意重命名会破坏客户端与服务端的匹配契约。
451
484
 
452
485
  ### 字段清除 / Purging (去掉未被引用的字段内容)
@@ -475,7 +508,7 @@ export default config;
475
508
  { "title": "…", "subtitle": "…" }
476
509
  ```
477
510
 
478
- > 与前边提到的类似,当 `optimize` 是 `false` 或是开启了可视化编辑器(`editor.enabled` 取值 `true`) 时,它会选择跳过对数据的清除操作。
511
+ > 与前边提到的类似,当 `optimize` 是 `false` 或是开启了可视化编辑器(`editor.enabled` 取值 `true`) 时,它会选择跳过对数据的清除操作。 在 Next.js 上,当 `@intlayer/swc` 不可用以及配置了兼容适配器调用方时,还会被额外跳过。
479
512
 
480
513
  > 当检测到某份代码因为异常无法顺利解析、又或者当把由 `useIntlayer` 输出的值以静态解析器难以预测分析的模式在不同组件中来回丢(比如被打包成对象传入等而未被进行解构)的时候,它同样会跳过,以此保守地保留整部字典的全部信息,避免意外发生。
481
514
 
@@ -403,7 +403,7 @@ const config: IntlayerConfig = {
403
403
  ai: {
404
404
  /**
405
405
  * 使用的 AI 提供商。
406
- * 选项:'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'
406
+ * 选项:'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio', 'moonshotai'
407
407
  * 默认值:'openai'
408
408
  */
409
409
  provider: "openai",
@@ -1034,15 +1034,15 @@ Intlayer 支持多个 AI 提供商,以提供最大的灵活性。当前支持
1034
1034
  - **Together.ai**
1035
1035
  - **LM Studio**
1036
1036
 
1037
- | 字段 | 说明 | 类型 | 默认值 | 示例 | 备注 |
1038
- | -------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
1039
- | `provider` | 要为 Intlayer AI 功能使用的提供商。 | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` | `undefined` | `'anthropic'` | 不同的提供商需要不同的 API 密钥,且价格不同。 |
1040
- | `model` | 要为 AI 功能使用的 AI 模型。 | `string` | 无 | `'gpt-4o-2024-11-20'` | 具体模型取决于提供商。 |
1041
- | `temperature` | 控制 AI 响应的随机性。 | `number` | 无 | `0.1` | 温度越高 = 越具创造力且越不可靠。 |
1042
- | `apiKey` | 所选提供商的您的 API 密钥。 | `string` | 无 | `process.env.OPENAI_API_KEY` | 应保持私密;使用环境变量。 |
1043
- | `applicationContext` | 有关应用程序的其他上下文,以帮助 AI 生成更准确的翻译(领域、目标受众、语气、术语)。 | `string` | 无 | `'我的自定义应用程序上下文'` | 可用于添加规则(例如:`"您不应转换您的 URL"` )。 |
1044
- | `baseURL` | AI API 的基础 URL。 | `string` | 无 | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | 可以指向本地或自定义的 AI API 端点。 |
1045
- | `dataSerialization` | AI 功能的数据序列化格式。 | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: 默认,可靠;使用更多 token。<br/>• `'toon'`: token 更少,但也更不稳定。<br/>• 将上下文作为额外参数(reasoning effort 等)传递给模型。 |
1037
+ | 字段 | 说明 | 类型 | 默认值 | 示例 | 备注 |
1038
+ | -------------------- | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
1039
+ | `provider` | 要为 Intlayer AI 功能使用的提供商。 | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` &#124; <br/> `'moonshotai'` | `undefined` | `'anthropic'` | 不同的提供商需要不同的 API 密钥,且价格不同。 |
1040
+ | `model` | 要为 AI 功能使用的 AI 模型。 | `string` | 无 | `'gpt-4o-2024-11-20'` | 具体模型取决于提供商。 |
1041
+ | `temperature` | 控制 AI 响应的随机性。 | `number` | 无 | `0.1` | 温度越高 = 越具创造力且越不可靠。 |
1042
+ | `apiKey` | 所选提供商的您的 API 密钥。 | `string` | 无 | `process.env.OPENAI_API_KEY` | 应保持私密;使用环境变量。 |
1043
+ | `applicationContext` | 有关应用程序的其他上下文,以帮助 AI 生成更准确的翻译(领域、目标受众、语气、术语)。 | `string` | 无 | `'我的自定义应用程序上下文'` | 可用于添加规则(例如:`"您不应转换您的 URL"` )。 |
1044
+ | `baseURL` | AI API 的基础 URL。 | `string` | 无 | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | 可以指向本地或自定义的 AI API 端点。 |
1045
+ | `dataSerialization` | AI 功能的数据序列化格式。 | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: 默认,可靠;使用更多 token。<br/>• `'toon'`: token 更少,但也更不稳定。<br/>• 将上下文作为额外参数(reasoning effort 等)传递给模型。 |
1046
1046
 
1047
1047
  ---
1048
1048
 
@@ -188,7 +188,7 @@ export const ComponentExample = () => {
188
188
  这种方法允许你:
189
189
 
190
190
  1. **提高开发速度**
191
- - 可以使用 VSCode 插件创建 `.content.{{ts|mjs|cjs|json}}` 文件
191
+ - 可以使用 VSCode 插件创建 `.content.{ts|js|mjs|cjs|json|tsx|jsx|md|mdx|yaml|yml}` 文件
192
192
  - IDE 中的 AI 自动补全工具(例如 GitHub Copilot)可以帮助你声明内容,减少复制/粘贴
193
193
 
194
194
  2. **保持代码库的整洁**
@@ -212,27 +212,27 @@ export const ComponentExample = () => {
212
212
 
213
213
  ## Intlayer 附加功能
214
214
 
215
- | 功能 | 描述 |
216
- | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
217
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/frameworks.png?raw=true) | **跨框架支持**<br><br>Intlayer 兼容所有主流框架和库,包括 Next.js、React、Vite、Vue.js、Nuxt、Preact、Express 等。 |
218
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.jpg?raw=true) | **JavaScript 驱动的内容管理**<br><br>利用 JavaScript 的灵活性来高效地定义和管理你的内容。<br><br> - [内容声明](https://intlayer.org/doc/concept/content) |
219
- | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/compiler.jpg?raw=true" alt="Feature" width="700"> | **编译器**<br><br>Intlayer 编译器可自动从组件中提取内容并生成字典文件。<br><br> - [编译器](https://intlayer.org/doc/compiler) |
220
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/per_locale_content_declaration_file.png?raw=true) | **单语言内容声明文件**<br><br>在自动生成前,通过仅声明一次你的内容来加速开发。<br><br> - [单语言内容声明文件](https://intlayer.org/doc/concept/per-locale-file) |
221
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true) | **类型安全环境**<br><br>利用 TypeScript 确保你的内容定义和代码没有错误,同时还能享受 IDE 的自动补全功能。<br><br> - [TypeScript 配置](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
222
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/config_file.png?raw=true) | **简易配置**<br><br>仅需极简的配置即可快速启动并运行。轻松调整国际化、路由、AI、构建以及内容处理的设置。<br><br> - [探索 Next.js 集成](https://intlayer.org/doc/environment/nextjs) |
223
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/content_retrieval.png?raw=true) | **简化内容检索**<br><br>无需为每一小段内容调用 `t` 函数。使用单一的 hook 即可直接检索你的所有内容。<br><br> - [React 集成](https://intlayer.org/doc/environment/create-react-app) |
224
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/server_component.png?raw=true) | **一致的服务器组件实现**<br><br>完美适合 Next.js 服务器组件,客户端和服务器组件使用相同的实现,无需跨每个服务器组件传递你的 `t` 函数。<br><br> - [服务器组件](https://intlayer.org/doc/environment/nextjs#step-7-utilize-content-in-your-code) |
225
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/file_tree.png?raw=true) | **有条理的代码库**<br><br>保持代码库更有条理:1 组件 = 在同一文件夹下的 1 个字典。靠近其各自组件的翻译有助于提高可维护性和清晰度。<br><br> - [Intlayer 运行机制](https://intlayer.org/doc/concept/how-works-intlayer) |
226
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/url_routing.png?raw=true) | **增强的路由功能**<br><br>完全支持应用路由,无缝适应复杂的应用结构,适用于 Next.js、React、Vite、Vue.js 等。<br><br> - [探索 Next.js 集成](https://intlayer.org/doc/environment/nextjs) |
227
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/markdown.png?raw=true) | **Markdown 支持**<br><br>导入并解译本地文件以及远程 Markdown,以获得隐私政策、文档等多语言内容。解译并在你的代码中使 Markdown 元数据可被访问。<br><br> - [内容文件](https://intlayer.org/doc/concept/content/file) |
228
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/visual_editor.png?raw=true) | **免费的可视化编辑器与 CMS**<br><br>可视化编辑器和 CMS 免费向内容创作者开放,消除了对第三方本地化平台的依赖。使用 Git 保持内容同步,或使用 CMS 彻底或部分外置管理它。<br><br> - [Intlayer 编辑器](https://intlayer.org/doc/concept/editor) <br> - [Intlayer CMS](https://intlayer.org/doc/concept/cms) |
229
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.png?raw=true) | **构建时摇树优化 (Tree-shakable) 内容**<br><br>构建时摇树优化内容,减小最终包的体积。按组件加载内容,并从打包体积中排除任何未使用的内容。支持懒加载以提高应用加载效率。<br><br> - [应用构建优化](https://intlayer.org/doc/concept/how-works-intlayer#app-build-optimization) |
230
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/static_rendering.png?raw=true) | **静态渲染**<br><br>不阻碍静态渲染(Static Rendering)。<br><br> - [Next.js 集成](https://intlayer.org/doc/environment/nextjs) |
231
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/AI_translation.png?raw=true) | **AI 驱动翻译**<br><br>使用您自己的 AI 提供商/API 密钥,点击一下即可将您的网站翻译成 231 种语言,得益于 Intlayer 先进的 AI 翻译工具。<br><br> - [CI/CD 集成](https://intlayer.org/doc/concept/ci-cd) <br> - [Intlayer CLI](https://intlayer.org/doc/concept/cli) <br> - [自动填充](https://intlayer.org/doc/concept/auto-fill) |
232
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/mcp.png?raw=true) | **MCP 服务器集成**<br><br>提供用于 IDE 自动化的 MCP(Model Context Protocol)服务器,能够直接在你的开发环境中实现无缝的内容管理和 i18n 工作流。<br><br> - [MCP 服务器](https://github.com/aymericzip/intlayer/blob/main/docs/zh/mcp_server.md) |
233
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/vscode_extension.png?raw=true) | **VSCode 插件**<br><br>Intlayer 提供 VSCode 插件协助管理你的内容和翻译,构建你的字典,翻译你的内容等。<br><br> - [VSCode 插件](https://intlayer.org/doc/vs-code-extension) |
234
- | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/interoperability.png?raw=true) | **互操作性**<br><br>允许与 react-i18next、next-i18next、next-intl 和 react-intl 互操作。<br><br> - [Intlayer 与 react-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayer 与 next-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayer 与 next-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) |
235
- | 测试缺失翻译 (CLI/CI) | ✅ CLI: npx intlayer content test (对 CI 友好的审计) |
215
+ | 功能 | 描述 |
216
+ | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
217
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/frameworks.png?raw=true) | **跨框架支持**<br><br>Intlayer 兼容所有主流框架和库,包括 Next.js、React、Vite、Vue.js、Nuxt、Preact、Express 等。 |
218
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/javascript_content_management.jpg?raw=true) | **JavaScript 驱动的内容管理**<br><br>利用 JavaScript 的灵活性来高效地定义和管理你的内容。<br><br> - [内容声明](https://intlayer.org/doc/concept/content) |
219
+ | <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/compiler.jpg?raw=true" alt="Feature" width="700"> | **编译器**<br><br>Intlayer 编译器可自动从组件中提取内容并生成字典文件。<br><br> - [编译器](https://intlayer.org/doc/compiler) |
220
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/per_locale_content_declaration_file.png?raw=true) | **单语言内容声明文件**<br><br>在自动生成前,通过仅声明一次你的内容来加速开发。<br><br> - [单语言内容声明文件](https://intlayer.org/doc/concept/per-locale-file) |
221
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true) | **类型安全环境**<br><br>利用 TypeScript 确保你的内容定义和代码没有错误,同时还能享受 IDE 的自动补全功能。<br><br> - [TypeScript 配置](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
222
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/config_file.png?raw=true) | **简易配置**<br><br>仅需极简的配置即可快速启动并运行。轻松调整国际化、路由、AI、构建以及内容处理的设置。<br><br> - [探索 Next.js 集成](https://intlayer.org/doc/environment/nextjs) |
223
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/content_retrieval.png?raw=true) | **简化内容检索**<br><br>无需为每一小段内容调用 `t` 函数。使用单一的 hook 即可直接检索你的所有内容。<br><br> - [React 集成](https://intlayer.org/doc/environment/create-react-app) |
224
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/server_component.png?raw=true) | **一致的服务器组件实现**<br><br>完美适合 Next.js 服务器组件,客户端和服务器组件使用相同的实现,无需跨每个服务器组件传递你的 `t` 函数。<br><br> - [服务器组件](https://intlayer.org/doc/environment/nextjs#step-7-utilize-content-in-your-code) |
225
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/file_tree.png?raw=true) | **有条理的代码库**<br><br>保持代码库更有条理:1 组件 = 在同一文件夹下的 1 个字典。靠近其各自组件的翻译有助于提高可维护性和清晰度。<br><br> - [Intlayer 运行机制](https://intlayer.org/doc/concept/how-works-intlayer) |
226
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/url_routing.png?raw=true) | **增强的路由功能**<br><br>完全支持应用路由,无缝适应复杂的应用结构,适用于 Next.js、React、Vite、Vue.js 等。<br><br> - [探索 Next.js 集成](https://intlayer.org/doc/environment/nextjs) |
227
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/markdown.png?raw=true) | **Markdown 支持**<br><br>导入并解译本地文件以及远程 Markdown,以获得隐私政策、文档等多语言内容。解译并在你的代码中使 Markdown 元数据可被访问。<br><br> - [内容文件](https://intlayer.org/doc/concept/content/file) |
228
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/visual_editor.png?raw=true) | **免费的可视化编辑器与 CMS**<br><br>可视化编辑器和 CMS 免费向内容创作者开放,消除了对第三方本地化平台的依赖。使用 Git 保持内容同步,或使用 CMS 彻底或部分外置管理它。<br><br> - [Intlayer 编辑器](https://intlayer.org/doc/concept/editor) <br> - [Intlayer CMS](https://intlayer.org/doc/concept/cms) |
229
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/bundle.png?raw=true) | **构建时摇树优化 (Tree-shakable) 内容**<br><br>构建时摇树优化内容,减小最终包的体积。按组件加载内容,并从打包体积中排除任何未使用的内容。支持懒加载以提高应用加载效率。<br><br> - [应用构建优化](https://intlayer.org/doc/concept/how-works-intlayer#app-build-optimization) |
230
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/static_rendering.png?raw=true) | **静态渲染**<br><br>不阻碍静态渲染(Static Rendering)。<br><br> - [Next.js 集成](https://intlayer.org/doc/environment/nextjs) |
231
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/AI_translation.png?raw=true) | **AI 驱动翻译**<br><br>使用您自己的 AI 提供商/API 密钥,点击一下即可将您的网站翻译成 231 种语言,得益于 Intlayer 先进的 AI 翻译工具。<br><br> - [CI/CD 集成](https://intlayer.org/doc/concept/ci-cd) <br> - [Intlayer CLI](https://intlayer.org/doc/concept/cli) <br> - [自动填充](https://intlayer.org/doc/concept/auto-fill) |
232
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/mcp.png?raw=true) | **MCP 服务器集成**<br><br>提供用于 IDE 自动化的 MCP(Model Context Protocol)服务器,能够直接在你的开发环境中实现无缝的内容管理和 i18n 工作流。<br><br> - [MCP 服务器](https://github.com/aymericzip/intlayer/blob/main/docs/zh/mcp_server.md) |
233
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/vscode_extension.png?raw=true) | **VSCode 插件**<br><br>Intlayer 提供 VSCode 插件协助管理你的内容和翻译,构建你的字典,翻译你的内容等。<br><br> - [VSCode 插件](https://intlayer.org/doc/vs-code-extension) |
234
+ | ![Feature](https://github.com/aymericzip/intlayer/blob/main/docs/assets/interoperability.png?raw=true) | **互操作性**<br><br>允许与 react-i18next、next-i18next、next-intl 和 react-intl 互操作。<br><br> - [Intlayer 与 react-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayer 与 next-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayer 与 next-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) <br> - [Intlayer 兼容适配器](https://intlayer.org/doc/compatibility) |
235
+ | 测试缺失翻译 (CLI/CI) | ✅ CLI: npx intlayer content test (对 CI 友好的审计) |
236
236
 
237
237
  ## Intlayer 与其他解决方案的比较
238
238
 
@@ -271,3 +271,5 @@ GitHub Star 数是衡量项目受欢迎程度、社区信任度以及长期相
271
271
  `intlayer` 还可以帮助管理你的 `react-intl`、`react-i18next`、`next-intl`、`next-i18next` 以及 `vue-i18n` 命名空间。
272
272
 
273
273
  使用 `intlayer`,你可以声明你喜欢的 i18n 库格式的内容,并且 intlayer 将在你想指定的路径下生成命名空间(例如:`/messages/{{locale}}/{{namespace}}.json`)。
274
+
275
+ 如果你想继续使用当前 i18n 库的 API,`intlayer` 还提供了 **兼容适配器(compat adapters)**:这些包暴露与 `react-i18next`、`next-intl`、`react-intl`、`vue-i18n` 等完全相同的 API,但内容由 Intlayer 词典提供。这样你就可以逐步迁移,而无需重写代码。参见[兼容适配器文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/compat/index.md)。
@@ -392,7 +392,7 @@ export const getLocale = (event: RequestEvent): Locale => {
392
392
  };
393
393
  ```
394
394
 
395
- > `getLocaleFromStorage` 将根据你的配置从 header 或 cookie 检查语言环境。有关更多详情,请参阅[配置](https://intlayer.org/doc/configuration)。
395
+ > `getLocaleFromStorage` 将根据你的配置从 header 或 cookie 检查语言环境。有关更多详情,请参阅[配置](https://intlayer.org/doc/concept/configuration)。
396
396
 
397
397
  > `localeDetector` 函数将处理 `Accept-Language` header 并返回最佳匹配。
398
398
 
@@ -237,19 +237,21 @@ import {
237
237
  HeadContent,
238
238
  Scripts,
239
239
  createRootRouteWithContext,
240
+ getRouteApi,
240
241
  } from "@tanstack/solid-router";
241
242
  import { HydrationScript } from "solid-js/web";
242
243
  import { Suspense, type ParentComponent } from "solid-js";
243
244
  import { IntlayerProvider } from "solid-intlayer";
244
245
  import { defaultLocale, getHTMLTextDir } from "intlayer";
245
- import { Route as LocaleRoute } from "./{-$locale}/route";
246
+
247
+ const localeRoute = getRouteApi("/{-$locale}");
246
248
 
247
249
  export const Route = createRootRouteWithContext()({
248
250
  shellComponent: RootComponent,
249
251
  });
250
252
 
251
253
  const RootComponent: ParentComponent = (props) => {
252
- const params = LocaleRoute.useParams();
254
+ const params = localeRoute.useParams();
253
255
  const locale = params()?.locale ?? defaultLocale;
254
256
 
255
257
  return (
@@ -538,7 +540,7 @@ export default LocaleSwitcher;
538
540
 
539
541
  ```tsx fileName="src/routes/__root.tsx"
540
542
  const RootComponent: ParentComponent = (props) => {
541
- const params = LocaleRoute.useParams();
543
+ const params = localeRoute.useParams();
542
544
  const locale = params()?.locale ?? defaultLocale;
543
545
 
544
546
  return (
@@ -254,13 +254,15 @@ export default config;
254
254
  ```tsx fileName="src/routes/__root.tsx"
255
255
  import {
256
256
  createRootRouteWithContext,
257
+ getRouteApi,
257
258
  HeadContent,
258
259
  Scripts,
259
260
  } from "@tanstack/react-router";
260
261
  import { defaultLocale, getHTMLTextDir } from "intlayer";
261
262
  import { type ReactNode } from "react";
262
263
  import { IntlayerProvider } from "react-intlayer";
263
- import { Route as LocaleRoute } from "./{-$locale}/route";
264
+
265
+ const localeRoute = getRouteApi("/{-$locale}");
264
266
 
265
267
  export const Route = createRootRouteWithContext<{}>()({
266
268
  head: () => ({
@@ -282,7 +284,7 @@ export const Route = createRootRouteWithContext<{}>()({
282
284
  });
283
285
 
284
286
  function RootDocument({ children }: { children: ReactNode }) {
285
- const params = LocaleRoute.useParams();
287
+ const params = localeRoute.useParams();
286
288
  const locale = params?.locale ?? defaultLocale;
287
289
 
288
290
  return (
@@ -619,7 +621,7 @@ export const LocaleSwitcher: FC = () => {
619
621
 
620
622
  ```tsx fileName="src/routes/__root.tsx"
621
623
  function RootDocument({ children }: { children: ReactNode }) {
622
- const params = LocaleRoute.useParams();
624
+ const params = localeRoute.useParams();
623
625
  const locale = params?.locale ?? defaultLocale;
624
626
 
625
627
  return (
@@ -13,6 +13,10 @@ keywords:
13
13
  - Intlayer
14
14
  - Next.js
15
15
  - Vite
16
+ slugs:
17
+ - doc
18
+ - concept
19
+ - live-sync
16
20
  history:
17
21
  - version: 9.0.0
18
22
  date: 2026-07-08