@modern-js/main-doc 3.1.5 → 3.2.0

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 (46) hide show
  1. package/docs/en/components/international/init-options-desc.mdx +1 -1
  2. package/docs/en/components/international/install-command.mdx +4 -17
  3. package/docs/en/components/international/instance-code.mdx +4 -14
  4. package/docs/en/components/international/introduce.mdx +4 -1
  5. package/docs/en/configure/app/source/enable-async-pre-entry.mdx +30 -0
  6. package/docs/en/configure/app/tools/dev-server.mdx +0 -4
  7. package/docs/en/guides/advanced-features/international/_meta.json +0 -1
  8. package/docs/en/guides/advanced-features/international/advanced.mdx +48 -109
  9. package/docs/en/guides/advanced-features/international/api.mdx +125 -290
  10. package/docs/en/guides/advanced-features/international/best-practices.mdx +203 -48
  11. package/docs/en/guides/advanced-features/international/configuration.mdx +108 -315
  12. package/docs/en/guides/advanced-features/international/locale-detection.mdx +62 -208
  13. package/docs/en/guides/advanced-features/international/quick-start.mdx +41 -55
  14. package/docs/en/guides/advanced-features/international/resource-loading.mdx +63 -322
  15. package/docs/en/guides/advanced-features/international/routing.mdx +60 -138
  16. package/docs/en/guides/advanced-features/international.mdx +19 -27
  17. package/docs/en/guides/basic-features/alias.mdx +1 -1
  18. package/docs/en/guides/basic-features/html.mdx +2 -2
  19. package/docs/en/guides/basic-features/static-assets.mdx +1 -2
  20. package/docs/en/guides/concept/entries.mdx +2 -2
  21. package/docs/zh/components/international/init-options-desc.mdx +1 -1
  22. package/docs/zh/components/international/install-command.mdx +4 -16
  23. package/docs/zh/components/international/instance-code.mdx +4 -14
  24. package/docs/zh/components/international/introduce.mdx +5 -2
  25. package/docs/zh/configure/app/source/enable-async-pre-entry.mdx +77 -0
  26. package/docs/zh/configure/app/tools/dev-server.mdx +0 -4
  27. package/docs/zh/guides/advanced-features/bff/function.mdx +2 -2
  28. package/docs/zh/guides/advanced-features/international/_meta.json +0 -1
  29. package/docs/zh/guides/advanced-features/international/advanced.mdx +48 -109
  30. package/docs/zh/guides/advanced-features/international/api.mdx +126 -292
  31. package/docs/zh/guides/advanced-features/international/best-practices.mdx +204 -49
  32. package/docs/zh/guides/advanced-features/international/configuration.mdx +105 -318
  33. package/docs/zh/guides/advanced-features/international/locale-detection.mdx +62 -236
  34. package/docs/zh/guides/advanced-features/international/quick-start.mdx +40 -54
  35. package/docs/zh/guides/advanced-features/international/resource-loading.mdx +62 -324
  36. package/docs/zh/guides/advanced-features/international/routing.mdx +58 -136
  37. package/docs/zh/guides/advanced-features/international.mdx +19 -26
  38. package/docs/zh/guides/basic-features/alias.mdx +1 -1
  39. package/docs/zh/guides/basic-features/html.mdx +2 -2
  40. package/docs/zh/guides/basic-features/static-assets.mdx +1 -2
  41. package/docs/zh/guides/concept/entries.mdx +2 -2
  42. package/package.json +4 -4
  43. package/docs/en/components/rspackPrecautions.mdx +0 -6
  44. package/docs/en/guides/advanced-features/international/basic.mdx +0 -417
  45. package/docs/zh/components/rspackPrecautions.mdx +0 -6
  46. package/docs/zh/guides/advanced-features/international/basic.mdx +0 -416
@@ -1,85 +1,59 @@
1
1
  ---
2
2
  title: 配置说明
3
3
  ---
4
-
5
4
  # 配置说明
6
5
 
7
- 插件的配置分为两部分:CLI 配置(`modern.config.ts`)和运行时配置(`modern.runtime.ts`)。两者需要结合使用,CLI 配置用于插件的基础设置,运行时配置用于 i18next 的初始化选项。
6
+ 插件配置分为两个文件,各有职责:
8
7
 
9
- :::warning
10
- 函数类型的配置(如 SDK 加载函数)只能在运行时配置(`modern.runtime.ts`)中设置,不能在 CLI 配置中设置。这是因为 CLI 配置在构建时执行,无法序列化函数。
8
+ | 文件 | 用途 |
9
+ | --- | --- |
10
+ | `modern.config.ts` | 插件基础设置,在构建/启动时读取 |
11
+ | `src/modern.runtime.ts` | i18next 初始化选项,在运行时读取 |
11
12
 
13
+ :::warning 函数类型只能在运行时配置中设置
14
+ `modern.config.ts` 在构建时执行,无法序列化函数。SDK 加载函数、自定义检测函数等必须放在 `modern.runtime.ts` 中。
12
15
  :::
13
16
 
14
- ## CLI 配置(modern.config.ts)
17
+ ## 配置归属一览
15
18
 
16
- `modern.config.ts` 中配置插件选项:
19
+ | 配置项 | 放在哪里 |
20
+ | --- | --- |
21
+ | `localeDetection`(语言检测、路径重定向等) | `modern.config.ts` |
22
+ | `backend`(资源路径、sdk 声明等) | `modern.config.ts` |
23
+ | `i18nInstance` | `modern.runtime.ts` |
24
+ | `initOptions`(fallbackLng、ns 等 i18next 选项) | `modern.runtime.ts` |
25
+ | `backend.sdk` 的实际加载函数 | `modern.runtime.ts` |
17
26
 
18
- ```ts
27
+ ## CLI 配置
28
+
29
+ ```ts title="modern.config.ts"
30
+ import { appTools, defineConfig } from '@modern-js/app-tools';
19
31
  import { i18nPlugin } from '@modern-js/plugin-i18n';
20
32
 
21
33
  export default defineConfig({
22
34
  plugins: [
35
+ appTools(),
23
36
  i18nPlugin({
24
- localeDetection: {
25
- // 语言检测配置
26
- },
27
- backend: {
28
- // 后端资源加载配置
29
- },
37
+ localeDetection: { ... },
38
+ backend: { ... },
30
39
  }),
31
40
  ],
32
41
  });
33
42
  ```
34
43
 
35
- ### localeDetection 配置
36
-
37
- `localeDetection` 用于配置语言检测相关选项:
38
-
39
- :::warning
40
- 如果启用了 `localePathRedirect`,`detection` 配置必须放在 CLI 配置(`modern.config.ts`)中,因为服务端插件需要根据此配置来获取语言信息并进行路径重定向。
41
-
42
- :::
43
-
44
- ```ts
45
- interface BaseLocaleDetectionOptions {
46
- /** 是否启用路径重定向,启用后会在 URL 中添加语言前缀 */
47
- localePathRedirect?: boolean;
48
-
49
- /** 是否启用 i18next 语言检测器 */
50
- i18nextDetector?: boolean;
51
-
52
- /** 支持的语言列表 */
53
- languages?: string[];
54
-
55
- /** 默认回退语言 */
56
- fallbackLanguage?: string;
57
-
58
- /** 自定义检测配置 */
59
- detection?: LanguageDetectorOptions;
60
-
61
- /** 忽略自动重定向的路由列表或函数
62
- *
63
- * 可以是一个字符串数组(路径模式),或一个函数来判断是否应该忽略重定向。
64
- * 支持精确匹配和前缀匹配(如 '/api' 会匹配 '/api' 和 '/api/users')。
65
- *
66
- * @example
67
- * // 字符串数组
68
- * ignoreRedirectRoutes: ['/api', '/admin']
69
- *
70
- * // 函数
71
- * ignoreRedirectRoutes: (pathname) => pathname.startsWith('/api')
72
- */
73
- ignoreRedirectRoutes?: string[] | ((pathname: string) => boolean);
74
- }
44
+ ### localeDetection 选项
75
45
 
76
- interface LocaleDetectionOptions extends BaseLocaleDetectionOptions {
77
- /** 按入口配置语言检测(多入口场景) */
78
- localeDetectionByEntry?: Record<string, BaseLocaleDetectionOptions>;
79
- }
80
- ```
46
+ | 字段 | 类型 | 默认值 | 说明 |
47
+ | --- | --- | --- | --- |
48
+ | `languages` | `string[]` | `[]` | 支持的语言列表 |
49
+ | `fallbackLanguage` | `string` | `''` | 语言检测失败时的兜底语言 |
50
+ | `localePathRedirect` | `boolean` | `false` | 接管 URL 语言前缀的识别、重定向和切换,详见[路由集成](./routing.md#启用语言路径前缀) |
51
+ | `i18nextDetector` | `boolean` | `false` | 启用 i18next 检测器(Cookie / Header 等) |
52
+ | `detection` | `LanguageDetectorOptions` | — | i18next 检测器详细配置,见[语言检测](./locale-detection.md) |
53
+ | `ignoreRedirectRoutes` | `string[] \| Function` | — | 跳过重定向的路由,见[语言检测](./locale-detection.md#ignoreredirectroutes) |
54
+ | `localeDetectionByEntry` | `Record<string, ...>` | — | 多入口按入口覆盖配置 |
81
55
 
82
- **示例**:
56
+ **示例:**
83
57
 
84
58
  ```ts
85
59
  i18nPlugin({
@@ -97,237 +71,78 @@ i18nPlugin({
97
71
  });
98
72
  ```
99
73
 
100
- ### backend 配置
101
-
102
- `backend` 用于配置资源加载方式:
103
-
104
- :::info
105
- **自动检测**:插件会在以下场景自动检测并启用 backend:
106
-
107
- 1. **如果配置了 `loadPath` 或 `addPath`**:由于你已经指定了资源路径,backend 会自动启用(`enabled: true`),无需检测 locales 目录。
108
-
109
- 2. **如果没有配置 backend**:插件会自动检测以下位置是否存在 `locales` 目录:
110
-
111
- - 项目根目录:`{项目根目录}/locales`
112
- - Config public 目录:`{项目根目录}/config/public/locales`
113
- - 通过 `server.publicDir` 配置的目录:`{项目根目录}/{publicDir}/locales`
114
-
115
- 如果目录存在且包含 JSON 文件,backend 会自动启用。
116
-
117
- 3. **如果显式设置 `enabled: false`**:不会进行自动检测,backend 保持禁用状态。
118
-
119
- 这种自动检测机制可以在 locales 目录不存在时减少不必要的 backend 注册,提升性能。
120
-
121
- :::
74
+ ### backend 选项
122
75
 
123
76
  ```ts
124
- interface BaseBackendOptions {
125
- /** 是否启用后端资源加载 */
77
+ interface BackendOptions {
78
+ // 是否启用后端资源加载
79
+ // 配置了 loadPath/addPath 时自动启用;locales 目录存在时也会自动检测
126
80
  enabled?: boolean;
127
81
 
128
- /** 资源文件加载路径(HTTP 后端) */
82
+ // 决定请求哪个 URL 或本地文件来获取翻译文案,支持 {{lng}} 和 {{ns}} 变量
83
+ // 默认:'/locales/{{lng}}/{{ns}}.json'
129
84
  loadPath?: string;
130
85
 
131
- /** 缺失翻译保存路径(可选) */
86
+ // 缺失翻译的上报路径(可选)
132
87
  addPath?: string;
133
88
 
134
- /** 链式后端的缓存命中模式(仅在同时配置 `loadPath` 和 `sdk` 时生效)
135
- *
136
- * - `'none'`(默认):如果第一个后端返回了资源,则停止,不再尝试下一个后端
137
- * - `'refresh'`:尝试从下一个后端刷新缓存并更新缓存
138
- * - `'refreshAndUpdateStore'`:尝试从下一个后端刷新缓存,更新缓存并同时更新 i18next 资源存储。
139
- * 这允许先显示 FS/HTTP 资源,然后 SDK 资源会异步更新它们。
140
- *
141
- * @default 'refreshAndUpdateStore' 当同时配置 loadPath 和 sdk 时
142
- */
143
- cacheHitMode?: 'none' | 'refresh' | 'refreshAndUpdateStore';
89
+ // 启用自定义后端 SDK,实际加载函数在运行时配置中提供
90
+ sdk?: boolean | string;
144
91
 
145
- /** SDK 加载函数(自定义后端)
146
- *
147
- * 注意:在 CLI 配置中只能设置为 `true` 或字符串标识符来启用 SDK 模式。
148
- * 实际的 SDK 函数必须在运行时配置(`modern.runtime.ts`)中通过 `initOptions.backend.sdk` 提供。
149
- *
150
- * 当同时配置 `loadPath`(或 FS 后端)和 `sdk` 时,插件会自动使用 `i18next-chained-backend`
151
- * 来链式加载多个后端。加载顺序为:
152
- * 1. HTTP/FS 后端(主要)- 先从 `loadPath` 或文件系统加载,用于快速初始显示
153
- * 2. SDK 后端(更新)- 从 SDK 函数加载,用于更新/刷新翻译
154
- *
155
- * 使用 `cacheHitMode: 'refreshAndUpdateStore'`(默认)时,FS/HTTP 资源会立即显示,
156
- * 然后 SDK 资源会异步加载以更新翻译。
157
- */
158
- sdk?: I18nSdkLoader | boolean | string;
159
- }
92
+ // 链式后端的缓存策略(同时配置 loadPath 和 sdk 时生效)
93
+ // 'none' — 本地文件成功后不再请求自定义后端
94
+ // 'refresh' — 继续请求自定义后端并更新缓存,不更新页面
95
+ // 'refreshAndUpdateStore' 继续请求并同步刷新页面文案(默认)
96
+ cacheHitMode?: 'none' | 'refresh' | 'refreshAndUpdateStore';
160
97
 
161
- interface BackendOptions extends BaseBackendOptions {
162
- /** 按入口配置后端(多入口场景) */
98
+ // 多入口场景下按入口覆盖配置
163
99
  backendOptionsByEntry?: Record<string, BaseBackendOptions>;
164
100
  }
165
101
  ```
166
102
 
167
- **示例**:
168
-
169
- **1. 仅使用 HTTP/FS 后端**:
170
-
171
- 你可以显式启用 backend:
172
-
173
- ```ts
174
- i18nPlugin({
175
- backend: {
176
- enabled: true,
177
- loadPath: '/locales/{{lng}}/{{ns}}.json',
178
- },
179
- });
180
- ```
181
-
182
- 或者只需配置 `loadPath` 或 `addPath`,backend 会自动启用:
103
+ **`sdk` 字段说明:** 在 `modern.config.ts` 中设为 `true` 表示声明启用,实际加载函数在 `modern.runtime.ts` 的 `initOptions.backend.sdk` 中提供。详见[资源加载 → 自定义后端](./resource-loading.md#自定义后端)。
183
104
 
184
- ```ts
185
- i18nPlugin({
186
- backend: {
187
- // enabled 会自动设置为 true
188
- loadPath: '/locales/{{lng}}/{{ns}}.json',
189
- },
190
- });
191
- ```
105
+ **backend 自动启用规则:**
192
106
 
193
- **无配置时的自动检测**:
107
+ | 情况 | 结果 |
108
+ | --- | --- |
109
+ | 配置了 `loadPath` 或 `addPath` | 自动启用,无需写 `enabled: true` |
110
+ | 未配置 backend,但 `locales` 目录存在且有 JSON 文件 | 自动启用,使用默认 `loadPath` |
111
+ | 显式设置 `enabled: false` | 禁用,不做自动检测 |
194
112
 
195
- 如果你完全不配置 backend,插件会自动检测 locales 目录:
113
+ 自动检测的目录位置(按优先级):
114
+ 1. `{项目根目录}/config/public/locales`
115
+ 2. `server.publicDir` 配置的目录下的 `locales` 子目录
196
116
 
197
- ```ts
198
- i18nPlugin({
199
- // 没有 backend 配置 - 插件会自动检测 locales 目录
200
- localeDetection: {
201
- languages: ['zh', 'en'],
202
- fallbackLanguage: 'en',
203
- },
204
- });
205
- ```
117
+ **选择哪种后端?**
206
118
 
207
- 如果 `locales` 目录存在且包含 JSON 文件,backend 会自动启用,使用默认的 `loadPath: '/locales/{{lng}}/{{ns}}.json'`。
119
+ | 场景 | 推荐方式 |
120
+ | --- | --- |
121
+ | 翻译文件放在项目本地 | 静态文件后端(配置 `loadPath`,CSR/SSR 自动切换) |
122
+ | 翻译来自远程 API 或翻译平台 | 自定义后端(配置 `sdk: true`) |
123
+ | 本地兜底 + 远程实时更新 | 链式后端(同时配置 `loadPath` 和 `sdk`) |
208
124
 
209
- **2. 链式后端(推荐)**:同时使用 HTTP/FS 后端和 SDK 后端
125
+ 详细用法见[资源加载](./resource-loading.md)。
210
126
 
211
- `backend.enabled = true` 且配置了 `sdk` 时,如果未显式配置 `loadPath`,将自动使用默认的 `loadPath` 并启用链式后端:
127
+ ## 运行时配置
212
128
 
213
- ```ts
214
- i18nPlugin({
215
- backend: {
216
- enabled: true,
217
- // 当未配置 loadPath 时,将自动使用默认的 '/locales/{{lng}}/{{ns}}.json'
218
- sdk: true, // SDK 后端
219
- // cacheHitMode: 'refreshAndUpdateStore', // 默认值,可省略
220
- },
221
- });
222
- ```
223
-
224
- 你也可以显式配置 `loadPath`:
225
-
226
- ```ts
227
- i18nPlugin({
228
- backend: {
229
- enabled: true,
230
- loadPath: '/locales/{{lng}}/{{ns}}.json', // HTTP/FS 后端
231
- sdk: true, // SDK 后端
232
- },
233
- });
234
- ```
235
-
236
- 在 `modern.runtime.ts` 中提供 SDK 函数:
237
-
238
- ```ts
239
- export default defineRuntimeConfig({
240
- i18n: {
241
- initOptions: {
242
- backend: {
243
- sdk: async options => {
244
- // SDK 实现
245
- if (options.lng && options.ns) {
246
- return await mySdk.getResource(options.lng, options.ns);
247
- }
248
- },
249
- },
250
- },
251
- },
252
- });
253
- ```
254
-
255
- 使用链式后端时,系统会:
256
-
257
- 1. 首先从 `/locales/{{lng}}/{{ns}}.json` 加载资源并立即显示(快速显示基础翻译)
258
- 2. 然后异步从 SDK 加载资源并更新 i18next store(更新/补充翻译)
259
-
260
- 这样可以确保用户快速看到页面内容,同时后台加载最新的翻译资源。
261
-
262
- **3. 仅使用 SDK 后端**:
263
-
264
- 如果你需要禁用 HTTP/FS 后端并仅使用 SDK 后端,可以显式设置 `loadPath: ''`:
265
-
266
- ```ts
267
- i18nPlugin({
268
- backend: {
269
- enabled: true,
270
- loadPath: '', // 显式禁用 HTTP/FS 后端
271
- sdk: true, // 仅使用 SDK 后端
272
- },
273
- });
274
- ```
275
-
276
- :::warning
277
- 当仅使用 SDK 后端时,必须在 `modern.runtime.ts` 中提供实际的 SDK 函数,否则将回退到 HTTP/FS 后端。
278
-
279
- :::
280
-
281
- ### 多入口配置
282
-
283
- 如果项目有多个入口,可以为每个入口单独配置:
284
-
285
- ```ts
286
- i18nPlugin({
287
- localeDetection: {
288
- localePathRedirect: true,
289
- languages: ['zh', 'en'],
290
- fallbackLanguage: 'en',
291
- // 为特定入口覆盖配置
292
- localeDetectionByEntry: {
293
- admin: {
294
- localePathRedirect: false, // admin 入口不使用路径重定向
295
- },
296
- },
297
- },
298
- backend: {
299
- enabled: true,
300
- // 为特定入口覆盖配置
301
- backendOptionsByEntry: {
302
- admin: {
303
- loadPath: '/admin/locales/{{lng}}/{{ns}}.json',
304
- },
305
- },
306
- },
307
- });
308
- ```
309
-
310
- ## 运行时配置(modern.runtime.ts)
311
-
312
- 在 `src/modern.runtime.ts` 中可以配置运行时选项:
313
-
314
- ```ts
129
+ ```ts title="src/modern.runtime.ts"
315
130
  import { defineRuntimeConfig } from '@modern-js/runtime';
316
131
  import i18next from 'i18next';
317
132
 
318
- // 建议创建一个新的 i18next 实例,避免使用全局默认实例
319
133
  const i18nInstance = i18next.createInstance();
320
134
 
321
135
  export default defineRuntimeConfig({
322
136
  i18n: {
323
- // 使用自定义 i18next 实例(可选)
324
- i18nInstance: i18nInstance,
325
-
326
- // i18next 初始化选项
137
+ i18nInstance, // 可选,建议使用独立实例
327
138
  initOptions: {
328
139
  fallbackLng: 'en',
329
140
  supportedLngs: ['zh', 'en'],
330
- // 其他 i18next 配置选项
141
+ ns: ['translation'],
142
+ defaultNS: 'translation',
143
+ interpolation: {
144
+ escapeValue: false, // React 已默认转义文本,此处关闭避免重复转义
145
+ },
331
146
  },
332
147
  },
333
148
  });
@@ -341,92 +156,64 @@ import CustomInstanceCode from '@site-docs/components/international/custom-insta
341
156
 
342
157
  <CustomInstanceCode />
343
158
 
344
- ### initOptions 配置
159
+ ### initOptions
345
160
 
346
- import InitOptionsDesc from '@site-docs/components/international/init-options-desc';
161
+ import Desc from '@site-docs/components/international/init-options-desc';
347
162
 
348
- <InitOptionsDesc />
163
+ <Desc />
349
164
 
350
- :::info
165
+ | 字段 | 说明 |
166
+ | --- | --- |
167
+ | `fallbackLng` | i18next 找不到翻译键时回退到哪个语言的资源,支持字符串、数组或映射(回退链) |
168
+ | `supportedLngs` | i18next 支持的语言列表 |
169
+ | `ns` | 命名空间列表,默认 `['translation']` |
170
+ | `defaultNS` | 默认命名空间,默认 `'translation'` |
171
+ | `lng` | 强制指定初始语言(通常不需要,由检测器决定) |
351
172
 
352
- 如果启用了 `localePathRedirect`,`detection` 配置应该在 CLI 配置中设置,而不是在 `initOptions` 中。这是因为服务端插件需要读取 CLI 配置中的 `detection` 选项来进行语言检测和路径重定向。
353
- :::
173
+ `fallbackLng` 支持回退链写法,适合区域语言降级的场景:
354
174
 
355
175
  ```ts
356
- export default defineRuntimeConfig({
357
- i18n: {
358
- initOptions: {
359
- // 语言相关
360
- lng: 'en',
361
- fallbackLng: 'en',
362
- supportedLngs: ['zh', 'en'],
363
-
364
- // 命名空间相关
365
- ns: ['translation', 'common'],
366
- defaultNS: 'translation',
367
-
368
- // React 相关
369
- react: {
370
- useSuspense: false,
371
- },
372
-
373
- // 其他 i18next 选项
374
- interpolation: {
375
- escapeValue: false,
376
- },
377
- },
176
+ initOptions: {
177
+ lng: 'zh-CN',
178
+ fallbackLng: {
179
+ 'zh-CN': ['zh', 'en'], // zh-CN 找不到时,先找 zh,再找 en
180
+ default: ['en'],
378
181
  },
379
- });
182
+ },
380
183
  ```
381
184
 
382
- ### SDK 后端配置
383
-
384
- 如果使用 SDK 后端,需要在运行时配置中提供实际的 SDK 函数:
385
-
386
- :::info
387
- 函数类型的配置只能在运行时配置中设置。在 CLI 配置中,`sdk` 只能设置为 `true` 或字符串标识符来启用 SDK 模式,实际的函数实现必须在 `modern.runtime.ts` 中提供。
388
- :::
185
+ ### 自定义后端函数配置
389
186
 
390
- **在 `modern.config.ts` 中启用 SDK 模式**:
187
+ 自定义后端的实际加载函数必须在运行时配置中提供:
391
188
 
392
189
  ```ts
190
+ // modern.config.ts:只声明启用
393
191
  i18nPlugin({
394
- backend: {
395
- enabled: true,
396
- sdk: true, // 启用 SDK 模式
397
- },
192
+ backend: { sdk: true },
398
193
  });
399
- ```
400
194
 
401
- **在 `modern.runtime.ts` 中提供 SDK 函数**:
402
-
403
- ```ts
404
- import { defineRuntimeConfig } from '@modern-js/runtime';
195
+ // modern.runtime.ts:提供实际函数
405
196
  import type { I18nSdkLoader } from '@modern-js/plugin-i18n/runtime';
406
197
 
407
- const mySdkLoader: I18nSdkLoader = async options => {
408
- if (options.all) {
409
- // 加载所有资源
410
- return await fetchAllResources();
411
- }
412
-
198
+ const myLoader: I18nSdkLoader = async options => {
413
199
  if (options.lng && options.ns) {
414
- // 加载单个资源
415
- const response = await fetch(`/api/i18n/${options.lng}/${options.ns}`);
416
- return response.json();
200
+ const res = await fetch(`/api/i18n/${options.lng}/${options.ns}`);
201
+ return res.json();
417
202
  }
418
-
419
- // 处理其他情况
420
203
  return {};
421
204
  };
422
205
 
423
206
  export default defineRuntimeConfig({
424
207
  i18n: {
425
208
  initOptions: {
426
- backend: {
427
- sdk: mySdkLoader,
428
- },
209
+ backend: { sdk: myLoader },
429
210
  },
430
211
  },
431
212
  });
432
213
  ```
214
+
215
+ 完整用法见[资源加载 → 自定义后端](./resource-loading.md#自定义后端)。
216
+
217
+ ## 多入口配置
218
+
219
+ 多入口项目可以为每个入口单独覆盖配置,详见[高级用法 → 多入口配置](./advanced.md#多入口配置)。