@intlayer/docs 8.1.5 → 8.1.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 (81) hide show
  1. package/README.md +18 -9
  2. package/dist/cjs/generated/docs.entry.cjs +1 -1
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +1 -1
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +2 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/compiler.md +26 -0
  9. package/docs/ar/intlayer_with_nextjs_compiler.md +481 -0
  10. package/docs/ar/intlayer_with_vite+react_compiler.md +369 -0
  11. package/docs/ar/readme.md +138 -110
  12. package/docs/de/compiler.md +26 -0
  13. package/docs/de/intlayer_with_nextjs_compiler.md +481 -0
  14. package/docs/de/intlayer_with_vite+react_compiler.md +369 -0
  15. package/docs/de/readme.md +152 -124
  16. package/docs/en/compiler.md +27 -0
  17. package/docs/en/intlayer_with_nextjs_compiler.md +481 -0
  18. package/docs/en/intlayer_with_vite+react_compiler.md +368 -0
  19. package/docs/en/readme.md +129 -105
  20. package/docs/en-GB/compiler.md +26 -0
  21. package/docs/en-GB/intlayer_with_nextjs_compiler.md +481 -0
  22. package/docs/en-GB/intlayer_with_vite+react_compiler.md +369 -0
  23. package/docs/en-GB/readme.md +134 -108
  24. package/docs/es/compiler.md +26 -0
  25. package/docs/es/intlayer_with_nextjs_compiler.md +481 -0
  26. package/docs/es/intlayer_with_vite+react_compiler.md +369 -0
  27. package/docs/es/readme.md +149 -121
  28. package/docs/fr/compiler.md +26 -0
  29. package/docs/fr/intlayer_with_nextjs_compiler.md +481 -0
  30. package/docs/fr/intlayer_with_vite+react_compiler.md +369 -0
  31. package/docs/fr/readme.md +150 -122
  32. package/docs/hi/compiler.md +26 -0
  33. package/docs/hi/intlayer_with_nextjs_compiler.md +481 -0
  34. package/docs/hi/intlayer_with_vite+react_compiler.md +370 -0
  35. package/docs/hi/readme.md +153 -125
  36. package/docs/id/compiler.md +26 -0
  37. package/docs/id/intlayer_with_nextjs_compiler.md +481 -0
  38. package/docs/id/intlayer_with_vite+react_compiler.md +369 -0
  39. package/docs/id/readme.md +133 -105
  40. package/docs/it/compiler.md +26 -0
  41. package/docs/it/intlayer_with_nextjs_compiler.md +481 -0
  42. package/docs/it/intlayer_with_vite+react_compiler.md +374 -0
  43. package/docs/it/readme.md +155 -127
  44. package/docs/ja/compiler.md +26 -0
  45. package/docs/ja/intlayer_with_nextjs_compiler.md +481 -0
  46. package/docs/ja/intlayer_with_vite+react_compiler.md +369 -0
  47. package/docs/ja/readme.md +152 -126
  48. package/docs/ko/compiler.md +26 -0
  49. package/docs/ko/intlayer_with_nextjs_compiler.md +481 -0
  50. package/docs/ko/intlayer_with_vite+react_compiler.md +369 -0
  51. package/docs/ko/readme.md +154 -126
  52. package/docs/pl/compiler.md +26 -0
  53. package/docs/pl/intlayer_with_nextjs_compiler.md +481 -0
  54. package/docs/pl/intlayer_with_vite+react_compiler.md +369 -0
  55. package/docs/pl/readme.md +134 -106
  56. package/docs/pt/compiler.md +27 -1
  57. package/docs/pt/intlayer_with_nextjs_compiler.md +481 -0
  58. package/docs/pt/intlayer_with_vite+react_compiler.md +374 -0
  59. package/docs/pt/readme.md +154 -126
  60. package/docs/ru/compiler.md +26 -0
  61. package/docs/ru/intlayer_with_nextjs_compiler.md +481 -0
  62. package/docs/ru/intlayer_with_vite+react_compiler.md +369 -0
  63. package/docs/ru/readme.md +137 -109
  64. package/docs/tr/compiler.md +26 -0
  65. package/docs/tr/intlayer_with_nextjs_compiler.md +481 -0
  66. package/docs/tr/intlayer_with_vite+react_compiler.md +375 -0
  67. package/docs/tr/readme.md +139 -111
  68. package/docs/uk/compiler.md +26 -0
  69. package/docs/uk/intlayer_with_nextjs_compiler.md +481 -0
  70. package/docs/uk/intlayer_with_vite+react_compiler.md +369 -0
  71. package/docs/uk/readme.md +133 -109
  72. package/docs/vi/compiler.md +27 -1
  73. package/docs/vi/intlayer_with_nextjs_compiler.md +481 -0
  74. package/docs/vi/intlayer_with_vite+react_compiler.md +369 -0
  75. package/docs/vi/readme.md +138 -110
  76. package/docs/zh/compiler.md +26 -0
  77. package/docs/zh/intlayer_with_nextjs_compiler.md +481 -0
  78. package/docs/zh/intlayer_with_vite+react_compiler.md +372 -0
  79. package/docs/zh/readme.md +148 -120
  80. package/package.json +7 -8
  81. package/src/generated/docs.entry.ts +40 -0
@@ -0,0 +1,481 @@
1
+ ---
2
+ createdAt: 2026-01-10
3
+ updatedAt: 2026-01-10
4
+ title: Next.js i18n - 将现有的 Next.js 应用程序转换为多语言应用程序 (i18n 指南 2026)
5
+ description: 了解如何使用 Intlayer 编译器将现有的 Next.js 应用程序转换为多语言。按照文档进行国际化 (i18n) 并使用 AI 进行翻译。
6
+ keywords:
7
+ - 国际化
8
+ - 文档
9
+ - Intlayer
10
+ - Next.js
11
+ - JavaScript
12
+ - React
13
+ - 编译器
14
+ - AI
15
+ slugs:
16
+ - doc
17
+ - 设定
18
+ - nextjs
19
+ - 编译器
20
+ applicationTemplate: https://github.com/aymericzip/intlayer-next-no-lolale-path-template
21
+ youtubeVideo: https://www.youtube.com/watch?v=e_PPG7PTqGU
22
+ history:
23
+ - version: 8.1.6
24
+ date: 2026-02-23
25
+ changes: 初始版本
26
+ ---
27
+
28
+ # 如何将现有的 Next.js 应用程序多语言化 (i18n) (i18n 指南 2026)
29
+
30
+ <Tabs defaultTab="video">
31
+ <Tab label="视频" value="video">
32
+
33
+ <iframe title="Next.js 的最佳 i18n 解决方案?了解 Intlayer" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/e_PPG7PTqGU?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
34
+
35
+ </Tab>
36
+ <Tab label="代码" value="code">
37
+
38
+ <iframe
39
+ src="https://stackblitz.com/github/aymericzip/intlayer-next-16-no-locale-path-template?embed=1&ctl=1&file=intlayer.config.ts"
40
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
41
+ title="演示 CodeSandbox - 如何使用 Intlayer 对您的应用程序进行国际化"
42
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
43
+ loading="lazy"
44
+ />
45
+
46
+ </Tab>
47
+ </Tabs>
48
+
49
+ 在 GitHub 上查看[应用程序模板](https://github.com/aymericzip/intlayer-next-no-lolale-path-template)。
50
+
51
+ ## 目录
52
+
53
+ <TOC/>
54
+
55
+ ## 为什么对现有应用程序进行国际化会很困难?
56
+
57
+ 如果您曾经尝试向仅为单语言构建的应用程序中添加多种语言,您就会明白其中的痛苦。这不仅仅是“困难”,而是非常繁琐。您必须检查每个文件,找出每一个文本字符串,并将它们移动到单独的字典文件中。
58
+
59
+ 接下来才是冒险的部分:用代码钩子替换所有文本,同时保证不破坏布局或逻辑。这类工作往往会让新功能的开发停滞数周,感觉像是一场无止境的重构。
60
+
61
+ ## 什么是 Intlayer 编译器?
62
+
63
+ **Intlayer 编译器**旨在规避这种繁琐的手动工作。您无需手动提取字符串,编译器会为您完成。它会扫描您的代码,找到文本,并使用 AI 在后台生成字典。
64
+ 然后,在构建步骤期间,它会修改您的源代码以注入必要的 i18n 钩子。基本上,您可以像写单语言应用一样继续编写您的应用,而编译器会自动原生处理多语言转换。
65
+
66
+ > 编译器文档:[https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compiler.md](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compiler.md)
67
+
68
+ ### 限制
69
+
70
+ 由于编译器在**编译时**执行代码分析和转换(注入钩子和生成字典),因此它可能会**减慢应用程序的构建时间**。
71
+
72
+ 为了限制在活跃开发过程(dev 模式)中的影响,您可以将编译器设置为 [`'build-only'`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md) 模式,或在不需要时将其禁用。
73
+
74
+ ---
75
+
76
+ ## 在 Next.js 应用程序中设置 Intlayer 的分步指南
77
+
78
+ ### 步骤 1:安装依赖项
79
+
80
+ 使用您偏好的包管理器安装必要的包:
81
+
82
+ ```bash packageManager="npm"
83
+ npm install intlayer next-intlayer
84
+ npm install @intlayer/babel --save-dev
85
+ npx intlayer init
86
+ ```
87
+
88
+ ```bash packageManager="pnpm"
89
+ pnpm add intlayer next-intlayer
90
+ pnpm add @intlayer/babel --save-dev
91
+ pnpm intlayer init
92
+ ```
93
+
94
+ ```bash packageManager="yarn"
95
+ yarn add intlayer next-intlayer
96
+ yarn add @intlayer/babel --save-dev
97
+ yarn intlayer init
98
+ ```
99
+
100
+ ```bash packageManager="bun"
101
+ bun add intlayer next-intlayer
102
+ bun add @intlayer/babel --dev
103
+ bunx intlayer init
104
+ ```
105
+
106
+ - **intlayer**
107
+
108
+ 核心包,提供用于配置管理、翻译、[内容声明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)、转译和 [CLI 命令](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/index.md)的国际化工具。
109
+
110
+ - **next-intlayer**
111
+
112
+ 将 Intlayer 与 Next.js 集成的包。它为 Next.js 国际化提供上下文提供程序和钩子。此外,它还包括用于将 Intlayer 与 [Webpack](https://webpack.js.org/) 或 [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack) 集成的 Next.js 插件,以及用于检测用户首选语言环境、管理 cookie 和处理 URL 重定向的中间件。
113
+
114
+ ### 步骤 2:配置您的项目
115
+
116
+ 创建一个配置文件来定义应用程序的语言:
117
+
118
+ ```typescript fileName="intlayer.config.ts"
119
+ import { Locales, type IntlayerConfig } from "intlayer";
120
+
121
+ const config: IntlayerConfig = {
122
+ internationalization: {
123
+ locales: [Locales.ENGLISH, Locales.CHINESE],
124
+ defaultLocale: Locales.CHINESE,
125
+ },
126
+ routing: {
127
+ mode: "search-params",
128
+ },
129
+ compiler: {
130
+ enabled: true, // 可以设置为 'build-only' 来限制开发模式下的影响
131
+ outputDir: "i18n",
132
+ dictionaryKeyPrefix: "", // 无编译前缀,默认为 "comp-"
133
+ },
134
+ ai: {
135
+ provider: "openai",
136
+ model: "gpt-5-mini",
137
+ apiKey: process.env.OPEN_AI_API_KEY,
138
+ applicationContext: "这是一个简单的地图应用程序示例",
139
+ },
140
+ };
141
+
142
+ export default config;
143
+ ```
144
+
145
+ > **注意**:请确保您在环境变量中设置了 `OPEN_AI_API_KEY`。
146
+
147
+ > 通过此配置文件,您可以设置本地化的 URL、代理重定向、cookie 映射、内容声明的位置和扩展名、在控制台中禁用 Intlayer 日志等等。有关可用参数的完整列表,请参阅[配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)。
148
+
149
+ ### 步骤 3:将 Intlayer 集成到 Next.js 配置中
150
+
151
+ 配置您的 Next.js 设置以使用 Intlayer:
152
+
153
+ ```typescript fileName="next.config.ts"
154
+ import type { NextConfig } from "next";
155
+ import { withIntlayer } from "next-intlayer/server";
156
+
157
+ const nextConfig: NextConfig = {
158
+ /* 这里可选填写额外的 Next.js 配置 */
159
+ };
160
+
161
+ export default withIntlayer(nextConfig);
162
+ ```
163
+
164
+ > Next.js 插件 `withIntlayer()` 用于将 Intlayer 与 Next.js 集成。它确保字典文件的构建,并在开发模式下监视它们。它在 [Webpack](https://webpack.js.org/) 或 [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack) 环境中定义 Intlayer 环境变量。此外,它还提供别名以优化性能,并保留与服务器组件的兼容性。
165
+
166
+ ### 配置 Babel
167
+
168
+ Intlayer 编译器需要 Babel 来提取和优化您的内容。更新您的 `babel.config.js`(或 `babel.config.json`)以包含 Intlayer 插件:
169
+
170
+ ```typescript fileName="babel.config.js"
171
+ const {
172
+ intlayerExtractBabelPlugin,
173
+ intlayerOptimizeBabelPlugin,
174
+ getExtractPluginOptions,
175
+ getOptimizePluginOptions,
176
+ } = require("@intlayer/babel");
177
+
178
+ module.exports = {
179
+ presets: ["next/babel"],
180
+ plugins: [
181
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
182
+ [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
183
+ ],
184
+ };
185
+ ```
186
+
187
+ ### 步骤 4:页面中的语言环境检测
188
+
189
+ 清空 `RootLayout` 的内容,并将其替换为以下示例:
190
+
191
+ ```tsx fileName="src/app/layout.tsx"
192
+ import type { Metadata } from "next";
193
+ import type { ReactNode } from "react";
194
+ import "./globals.css";
195
+ import { IntlayerClientProvider, LocalPromiseParams } from "next-intlayer";
196
+ import { getHTMLTextDir, getIntlayer } from "intlayer";
197
+ import { getLocale } from "next-intlayer/server";
198
+ export { generateStaticParams } from "next-intlayer";
199
+
200
+ export const generateMetadata = async (): Promise<Metadata> => {
201
+ const locale = await getLocale();
202
+ const { title, description, keywords } = getIntlayer("metadata", locale);
203
+
204
+ return {
205
+ title,
206
+ description,
207
+ keywords,
208
+ };
209
+ };
210
+
211
+ const RootLayout = async ({
212
+ children,
213
+ }: Readonly<{
214
+ children: ReactNode;
215
+ }>) => {
216
+ const locale = await getLocale();
217
+
218
+ return (
219
+ <html lang={locale} dir={getHTMLTextDir(locale)}>
220
+ <IntlayerClientProvider defaultLocale={locale}>
221
+ <body>{children}</body>
222
+ </IntlayerClientProvider>
223
+ </html>
224
+ );
225
+ };
226
+
227
+ export default RootLayout;
228
+ ```
229
+
230
+ ### 步骤 5:声明您的内容(自动)
231
+
232
+ 启用编译器后,您**不再需要**手动声明内容字典(例如 `.content.ts` 文件)。
233
+
234
+ 相反,您只需在代码中以硬编码字符串的形式写入您的内容。Intlayer 会扫描源代码,使用配置的 AI 提供商生成翻译,并在构建编译期间自动将这些字符串替换为本地化内容。这一切都是完全自动化的。
235
+
236
+ 只需在组件中使用默认语言环境的硬编码字符串,让 Intlayer 编译器处理剩下的工作。
237
+
238
+ `page.tsx` 可能看起来像这样:
239
+
240
+ <Tabs>
241
+ <Tab value="Code">
242
+
243
+ ```tsx fileName="src/app/page.tsx"
244
+ import type { FC } from "react";
245
+ import { IntlayerServerProvider } from "next-intlayer/server";
246
+ import { getLocale } from "next-intlayer/server";
247
+
248
+ const PageContent: FC = () => {
249
+ return (
250
+ <>
251
+ <p>开始编辑吧!</p>
252
+ <code>src/app/page.tsx</code>
253
+ </>
254
+ );
255
+ };
256
+
257
+ export default async function Page() {
258
+ const locale = await getLocale();
259
+
260
+ return (
261
+ <IntlayerServerProvider locale={locale}>
262
+ <PageContent />
263
+ </IntlayerServerProvider>
264
+ );
265
+ }
266
+ ```
267
+
268
+ </Tab>
269
+ <Tab value="Output">
270
+
271
+ ```ts fileName="i18n/page-content.content.tsx"
272
+ {
273
+ key: "page-content",
274
+ content: {
275
+ nodeType: "translation",
276
+ translation: {
277
+ en: {
278
+ getStartedByEditingThis: "Get started by editing this!",
279
+ },
280
+ fr: {
281
+ getStartedByEditingThis: "Commencez par éditer ceci !",
282
+ },
283
+ zh: {
284
+ getStartedByEditingThis: "开始编辑吧!",
285
+ },
286
+ }
287
+ }
288
+ }
289
+ ```
290
+
291
+ ```tsx fileName="src/app/page.tsx"
292
+ import { type FC } from "react";
293
+ import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
294
+ import { getLocale } from "next-intlayer/server";
295
+
296
+ const PageContent: FC = () => {
297
+ const content = useIntlayer("page-content");
298
+
299
+ return (
300
+ <>
301
+ <p>{content.getStartedByEditingThis}</p>
302
+ <code>src/app/page.tsx</code>
303
+ </>
304
+ );
305
+ };
306
+
307
+ export default async function Page() {
308
+ const locale = await getLocale();
309
+
310
+ return (
311
+ <IntlayerServerProvider locale={locale}>
312
+ <PageContent />
313
+ </IntlayerServerProvider>
314
+ );
315
+ }
316
+ ```
317
+
318
+ </Tab>
319
+ </Tabs>
320
+
321
+ - **`IntlayerClientProvider`** 用于在客户端向子组件提供语言环境。
322
+ - 而 **`IntlayerServerProvider`** 用于在服务器端向子组件提供语言环境。
323
+
324
+ ### (可选) 第 7 步:填写缺失的翻译
325
+
326
+ Intlayer 提供了一个 CLI 工具来帮助您填写缺失的翻译。您可以使用 `intlayer` 命令来测试并从您的代码中填写缺失的翻译。
327
+
328
+ ```bash
329
+ npx intlayer test # 测试是否有缺失的翻译
330
+ ```
331
+
332
+ ```bash
333
+ npx intlayer fill # 填写缺失的翻译
334
+ ```
335
+
336
+ > 有关更多详细信息,请参阅 [CLI 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/ci.md)
337
+
338
+ ### (可选) 步骤 8:本地化路由代理中间件
339
+
340
+ 如果您希望自动将用户重定向到其偏好的语言环境,请建立代理解析中间件:
341
+
342
+ ```typescript fileName="src/proxy.ts"
343
+ export { intlayerProxy as proxy } from "next-intlayer/proxy";
344
+
345
+ export const config = {
346
+ matcher:
347
+ "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
348
+ };
349
+ ```
350
+
351
+ > `intlayerProxy` 用于检测用户的首选语言环境,并根据 [配置文件设置](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md) 将其重定向到适当的 URL。此外,它还支持将用户的首选语言环境保存在 cookie 中。
352
+
353
+ ### (可选) 第 9 步:更改内容语言环境
354
+
355
+ 在 Next.js 中更改内容语言环境的最推荐方法是使用 `Link` 组件将用户重定向到包含相应语言环境的路由。这将利用 Next.js 的预取功能,并避免页面强制刷新。
356
+
357
+ ```tsx fileName="src/components/localeSwitcher/LocaleSwitcher.tsx"
358
+ "use client";
359
+
360
+ import type { FC } from "react";
361
+ import { Locales, getHTMLTextDir, getLocaleName } from "intlayer";
362
+ import { useLocale } from "next-intlayer";
363
+
364
+ export const LocaleSwitcher: FC = () => {
365
+ const { locale, availableLocales, setLocale } = useLocale({
366
+ onChange: () => window.location.reload(),
367
+ });
368
+
369
+ return (
370
+ <div>
371
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
372
+ <div id="localePopover" popover="auto">
373
+ {availableLocales.map((localeItem) => (
374
+ <button
375
+ key={localeItem}
376
+ aria-current={locale === localeItem ? "page" : undefined}
377
+ onClick={() => setLocale(localeItem)}
378
+ >
379
+ <span>
380
+ {/* 语言环境 - 例如:ZH */}
381
+ {localeItem}
382
+ </span>
383
+ <span>
384
+ {/* 语言环境自身的名称 - 例如:中文 */}
385
+ {getLocaleName(localeItem, locale)}
386
+ </span>
387
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
388
+ {/* 当前语言环境下的名称 - 例如:Francés(当当前语言环境为 Locales.SPANISH 时) */}
389
+ {getLocaleName(localeItem)}
390
+ </span>
391
+ <span dir="ltr" lang={Locales.ENGLISH}>
392
+ {/* 英语下的名称 - 例如:Chinese */}
393
+ {getLocaleName(localeItem, Locales.ENGLISH)}
394
+ </span>
395
+ </button>
396
+ ))}
397
+ </div>
398
+ </div>
399
+ );
400
+ };
401
+ ```
402
+
403
+ > 另一种方法是使用 `useLocale` 钩子提供的 `setLocale` 函数。该函数不支持页面预取。有关更多详细信息,请查看 [`useLocale` 钩子文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/next-intlayer/useLocale.md)。
404
+
405
+ ### (可选) 第 10 步:优化包体积
406
+
407
+ 使用 `next-intlayer` 时,字典默认会包含在每个页面的包中。为了优化包体积,Intlayer 提供了一个可选的 SWC 插件,它利用宏智能地优化 `useIntlayer` 调用。这确保了字典仅包含在实际使用它们的页面的包中。
408
+
409
+ 要启用此优化,请安装 `@intlayer/swc` 包。安装后,`next-intlayer` 会自动检测并使用该插件:
410
+
411
+ ```bash packageManager="npm"
412
+ npm install @intlayer/swc --save-dev
413
+ ```
414
+
415
+ ```bash packageManager="pnpm"
416
+ pnpm add @intlayer/swc --save-dev
417
+ ```
418
+
419
+ ```bash packageManager="yarn"
420
+ yarn add @intlayer/swc --save-dev
421
+ ```
422
+
423
+ ```bash packageManager="bun"
424
+ bun add @intlayer/swc --dev
425
+ ```
426
+
427
+ > 注意:此优化仅适用于 Next.js 13 及以上版本。
428
+
429
+ > 注意:由于 Next.js SWC 插件仍处于试验阶段,该包默认未安装。未来可能会有所改变。
430
+
431
+ > 注意:如果您设置了 `importMode: 'dynamic'` 或 `importMode: 'fetch'`(在字典配置中),它将依赖于 Suspense,因此您需要将 `useIntlayer` 调用包裹在 `Suspense` 边界内。这意味着您无法直接在页面/布局组件的顶层使用 `useIntlayer`。
432
+
433
+ ### TypeScript 配置
434
+
435
+ Intlayer 使用模块扩展 (module augmentation) 来利用 TypeScript 的优势并使您的代码库更加健壮。
436
+
437
+ ![自动补全](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
438
+
439
+ ![翻译错误](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
440
+
441
+ 确保您的 TypeScript 配置包含自动生成的类型。
442
+
443
+ ```json5 fileName="tsconfig.json"
444
+ {
445
+ // ... 您的现有 TypeScript 配置
446
+ "include": [
447
+ // ... 您的现有 TypeScript 配置
448
+ ".intlayer/**/*.ts", // 包含自动生成的类型
449
+ ],
450
+ }
451
+ ```
452
+
453
+ ### Git 配置
454
+
455
+ 建议忽略 Intlayer 生成的文件。这可以避免将它们提交到您的 Git 存储库中。
456
+
457
+ 为此,您可以在 `.gitignore` 文件中添加以下指令:
458
+
459
+ ```plaintext fileName=".gitignore"
460
+ # 忽略 Intlayer 生成的文件
461
+ .intlayer
462
+ ```
463
+
464
+ ### VS Code 扩展
465
+
466
+ 为了提升使用 Intlayer 的开发体验,您可以安装**官方 Intlayer VS Code 扩展**。
467
+
468
+ [从 VS Code Marketplace 安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
469
+
470
+ 该扩展提供:
471
+
472
+ - 翻译键的**自动补全**。
473
+ - 缺失翻译的**实时错误检测**。
474
+ - 翻译内容的**内联预览**。
475
+ - 轻松创建和更新翻译的**快速操作 (Quick actions)**。
476
+
477
+ 阅读 [Intlayer VS Code 扩展文档](https://intlayer.org/doc/vs-code-extension) 以了解更多关于扩展使用的详细说明。
478
+
479
+ ### 进一步深入
480
+
481
+ 您可以实现 [可视化编辑器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md) 或使用 [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md) 来实现内容的外部管理。