@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,372 @@
1
+ ---
2
+ createdAt: 2024-03-07
3
+ updatedAt: 2025-12-30
4
+ title: Vite 和 React i18n - 将现有应用转换为多语言应用(2026年 i18n 指南)
5
+ description: 了解如何使用 Intlayer 编译器使现有的 Vite 和 React 应用程序支持多语言。按照文档进行国际化 (i18n) 并使用 AI 进行翻译。
6
+ keywords:
7
+ - 国际化
8
+ - 文档
9
+ - Intlayer
10
+ - Vite
11
+ - React
12
+ - 编译器
13
+ - AI
14
+ slugs:
15
+ - doc
16
+ - environment
17
+ - vite-and-react
18
+ - compiler
19
+ - AI
20
+ applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
21
+ youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
22
+ history:
23
+ - version: 8.1.6
24
+ date: 2026-02-23
25
+ changes: 首次发布
26
+ ---
27
+
28
+ # 如何将现有的 Vite 和 React 应用程序转换为多语言 (i18n) 应用(2026年 i18n 指南)
29
+
30
+ <Tabs defaultTab="video">
31
+ <Tab label="视频" value="video">
32
+
33
+ <iframe title="Vite 和 React 的最佳 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/dS9L7uJeak4?si=VaKmrYMmXjo3xpk2"/>
34
+
35
+ </Tab>
36
+ <Tab label="代码" value="code">
37
+
38
+ <iframe
39
+ src="https://stackblitz.com/github/aymericzip/intlayer-vite-react-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-vite-react-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
+ 由于编译器在 **编译时** 执行代码分析 and 转换(插入钩子并生成字典),它可能会 **减慢应用程序的构建过程**。
71
+
72
+ 为了减轻开发期间的影响,您可以将编译器配置为以 [`'build-only'`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md) 模式运行,或在不需要时将其禁用。
73
+
74
+ ---
75
+
76
+ ## 在 Vite 和 React 应用程序中设置 Intlayer 的分步指南
77
+
78
+ ### 第 1 步:安装依赖项
79
+
80
+ 使用 npm 安装必要的包:
81
+
82
+ ```bash packageManager="npm"
83
+ npm install intlayer react-intlayer
84
+ npm install vite-intlayer --save-dev
85
+ npx intlayer init
86
+ ```
87
+
88
+ ```bash packageManager="pnpm"
89
+ pnpm add intlayer react-intlayer
90
+ pnpm add vite-intlayer --save-dev
91
+ pnpm intlayer init
92
+ ```
93
+
94
+ ```bash packageManager="yarn"
95
+ yarn add intlayer react-intlayer
96
+ yarn add vite-intlayer --save-dev
97
+ yarn intlayer init
98
+ ```
99
+
100
+ ```bash packageManager="bun"
101
+ bun add intlayer react-intlayer
102
+ bun add vite-intlayer --dev
103
+ bunx intlayer init
104
+ ```
105
+
106
+ - **intlayer**
107
+ 核心包,提供用于配置管理、翻译、[内容声明](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)的国际化工具。
108
+
109
+ - **react-intlayer**
110
+ 将 Intlayer 与 React 应用程序集成的包。它为 React 国际化提供上下文提供者和钩子。
111
+
112
+ - **vite-intlayer**
113
+ 包括用于将 Intlayer 与 [Vite 构建器](https://vite.dev/guide/why.html#why-bundle-for-production)集成的 Vite 插件,以及用于检测用户首选语言、管理 cookie 和处理 URL 重定向的中间件。
114
+
115
+ ### 第 2 步:配置您的项目
116
+
117
+ 创建一个配置文件来配置应用程序的语言:
118
+
119
+ ```typescript fileName="intlayer.config.ts"
120
+ import { Locales, type IntlayerConfig } from "intlayer";
121
+
122
+ const config: IntlayerConfig = {
123
+ internationalization: {
124
+ locales: [
125
+ Locales.ENGLISH,
126
+ Locales.FRENCH,
127
+ Locales.SPANISH,
128
+ Locales.CHINESE,
129
+ ],
130
+ defaultLocale: Locales.ENGLISH,
131
+ },
132
+ compiler: {
133
+ enabled: true, // 可以设置为 'build-only' 以限制对开发模式的影响
134
+ outputDir: "i18n",
135
+ dictionaryKeyPrefix: "", // 无前缀 comp-
136
+ },
137
+ ai: {
138
+ provider: "openai",
139
+ model: "gpt-5-mini",
140
+ apiKey: process.env.OPEN_AI_API_KEY,
141
+ applicationContext: "这个应用是一个地图应用", // 注意:您可以自定义此应用描述
142
+ },
143
+ };
144
+
145
+ export default config;
146
+ ```
147
+
148
+ > **注意**:请确保在环境变量中设置了 `OPEN_AI_API_KEY`。
149
+
150
+ > 通过此配置文件,您可以设置本地化 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名、禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅 [配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)。
151
+
152
+ ### 第 3 步:在 Vite 配置中集成 Intlayer
153
+
154
+ 将 intlayer 插件添加到您的配置中。
155
+
156
+ ```typescript fileName="vite.config.ts"
157
+ import { defineConfig } from "vite";
158
+ import react from "@vitejs/plugin-react-swc";
159
+ import { intlayer, intlayerCompiler } from "vite-intlayer";
160
+
161
+ // https://vitejs.dev/config/
162
+ export default defineConfig({
163
+ plugins: [react(), intlayer(), intlayerCompiler()],
164
+ });
165
+ ```
166
+
167
+ > `intlayer()` Vite 插件用于将 Intlayer 与 Vite 集成。它确保内容声明文件的构建并在开发模式下监控它们。它在 Vite 应用程序中定义 Intlayer 环境变量。此外,它提供别名以优化性能。
168
+
169
+ > `intlayerCompiler()` Vite 插件用于从组件中提取内容并编写 `.content` 文件。
170
+
171
+ ### 第 4 步:编译您的代码
172
+
173
+ 只需使用您的默认语言在组件中编写硬编码字符串。编译器会处理剩下的工作。
174
+
175
+ 您的页面可能如下所示:
176
+
177
+ <Tabs>
178
+ <Tab value="代码">
179
+
180
+ ```tsx fileName="src/App.tsx"
181
+ import { useState, type FC } from "react";
182
+ import reactLogo from "./assets/react.svg";
183
+ import viteLogo from "/vite.svg";
184
+ import "./App.css";
185
+ import { IntlayerProvider } from "react-intlayer";
186
+
187
+ const AppContent: FC = () => {
188
+ const [count, setCount] = useState(0);
189
+
190
+ return (
191
+ <>
192
+ <div>
193
+ <a href="https://vitejs.dev" target="_blank">
194
+ <img src={viteLogo} className="logo" alt="Vite logo" />
195
+ </a>
196
+ <a href="https://react.dev" target="_blank">
197
+ <img src={reactLogo} className="logo react" alt="React logo" />
198
+ </a>
199
+ </div>
200
+ <h1>Vite + React</h1>
201
+ <div className="card">
202
+ <button onClick={() => setCount((count) => count + 1)}>
203
+ count is {count}
204
+ </button>
205
+ <p>
206
+ Edit <code>src/App.tsx</code> and save to test HMR
207
+ </p>
208
+ </div>
209
+ <p className="read-the-docs">
210
+ Click on the Vite and React logos to learn more
211
+ </p>
212
+ </>
213
+ );
214
+ };
215
+
216
+ const App: FC = () => (
217
+ <IntlayerProvider>
218
+ <AppContent />
219
+ </IntlayerProvider>
220
+ );
221
+
222
+ export default App;
223
+ ```
224
+
225
+ </Tab>
226
+ <Tab value="输出">
227
+
228
+ ```ts fileName="i18n/app-content.content.json"
229
+ {
230
+ key: "app-content",
231
+ content: {
232
+ nodeType: "translation",
233
+ translation: {
234
+ en: {
235
+ viteLogo: "Vite logo",
236
+ reactLogo: "React logo",
237
+ title: "Vite + React",
238
+ countButton: "count is",
239
+ editMessage: "Edit",
240
+ hmrMessage: "and save to test HMR",
241
+ readTheDocs: "Click on the Vite and React logos to learn more",
242
+ },
243
+ zh: {
244
+ viteLogo: "Vite 图标",
245
+ reactLogo: "React 图标",
246
+ title: "Vite + React",
247
+ countButton: "当前计数为",
248
+ editMessage: "编辑",
249
+ hmrMessage: "并保存以测试 HMR",
250
+ readTheDocs: "点击 Vite 和 React 图标了解更多信息",
251
+ },
252
+ }
253
+ }
254
+ }
255
+ ```
256
+
257
+ ```tsx fileName="src/App.tsx"
258
+ import { useState, type FC } from "react";
259
+ import reactLogo from "./assets/react.svg";
260
+ import viteLogo from "/vite.svg";
261
+ import "./App.css";
262
+ import { IntlayerProvider, useIntlayer } from "react-intlayer";
263
+
264
+ const AppContent: FC = () => {
265
+ const [count, setCount] = useState(0);
266
+ const content = useIntlayer("app-content");
267
+
268
+ return (
269
+ <>
270
+ <div>
271
+ <a href="https://vitejs.dev" target="_blank">
272
+ <img src={viteLogo} className="logo" alt={content.viteLogo.value} />
273
+ </a>
274
+ <a href="https://react.dev" target="_blank">
275
+ <img
276
+ src={reactLogo}
277
+ className="logo react"
278
+ alt={content.reactLogo.value}
279
+ />
280
+ </a>
281
+ </div>
282
+ <h1>{content.title}</h1>
283
+ <div className="card">
284
+ <button onClick={() => setCount((count) => count + 1)}>
285
+ {content.countButton} {count}
286
+ </button>
287
+ <p>
288
+ {content.editMessage} <code>src/App.tsx</code> {content.hmrMessage}
289
+ </p>
290
+ </div>
291
+ <p className="read-the-docs">{content.readTheDocs}</p>
292
+ </>
293
+ );
294
+ };
295
+
296
+ const App: FC = () => (
297
+ <IntlayerProvider>
298
+ <AppContent />
299
+ </IntlayerProvider>
300
+ );
301
+
302
+ export default App;
303
+ ```
304
+
305
+ </Tab>
306
+ </Tabs>
307
+
308
+ - **`IntlayerProvider`** 用于向嵌套组件提供语言环境。
309
+
310
+ ### (可选)第 6 步:更改内容的语言
311
+
312
+ 要更改内容的语言,您可以使用 `useLocale` 钩子提供的 `setLocale` 函数。此函数允许您设置应用程序的语言环境并相应地更新内容。
313
+
314
+ ```tsx fileName="src/components/LocaleSwitcher.tsx"
315
+ import type { FC } from "react";
316
+ import { Locales } from "intlayer";
317
+ import { useLocale } from "react-intlayer";
318
+
319
+ const LocaleSwitcher: FC = () => {
320
+ const { setLocale } = useLocale();
321
+
322
+ return (
323
+ <button onClick={() => setLocale(Locales.CHINESE)}>将语言更改为中文</button>
324
+ );
325
+ };
326
+ ```
327
+
328
+ > 要了解有关 `useLocale` 钩子的更多信息,请参阅 [文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/react-intlayer/useLocale.md)。
329
+
330
+ ### (可选) 第 7 步:填充缺失的翻译
331
+
332
+ Intlayer 提供了一个 CLI 工具来帮助您填充缺失的翻译。您可以使用 `intlayer` 命令来测试并填充代码中缺失的翻译。
333
+
334
+ ```bash
335
+ npx intlayer test # 测试是否存在缺失的翻译
336
+ ```
337
+
338
+ ```bash
339
+ npx intlayer fill # 填充缺失的翻译
340
+ ```
341
+
342
+ > 有关更多详细信息,请参阅 [CLI 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/ci.md)
343
+
344
+ ### Git 配置
345
+
346
+ 建议忽略 Intlayer 生成的文件。这可以避免将它们提交到您的 Git 仓库。
347
+
348
+ 为此,您可以将以下指令添加到 `.gitignore` 文件中:
349
+
350
+ ```plaintext fileName=".gitignore"
351
+ # 忽略 Intlayer 生成的文件
352
+ .intlayer
353
+ ```
354
+
355
+ ### VS Code 扩展
356
+
357
+ 为了提升您使用 Intlayer 的开发体验,您可以安装官方的 **Intlayer VS Code 扩展**。
358
+
359
+ [从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
360
+
361
+ 此扩展提供:
362
+
363
+ - 翻译键的 **自动补全**。
364
+ - 缺失翻译的 **实时错误检测**。
365
+ - 翻译内容的 **内联预览**。
366
+ - 轻松创建和更新翻译的 **快速操作**。
367
+
368
+ 有关如何使用该扩展的更多详细信息,请参阅 [Intlayer VS Code 扩展文档](https://intlayer.org/doc/vs-code-extension)。
369
+
370
+ ### 深入了解
371
+
372
+ 要进一步深入,您可以实现 [可视化编辑器](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) 外置您的内容。