使用您最喜欢的AI助手总结文档,并引用此页面和AI提供商
版本历史
- "更新编译器选项,添加 FilePathPattern 支持"v8.2.02026/3/9
- "更新编译器选项"v8.1.72026/2/25
- "发布编译器"v7.3.12025/11/27
此页面的内容已使用 AI 翻译。
查看英文原文的最新版本如果您有改善此文档的想法,请随时通过在GitHub上提交拉取请求来贡献。
文档的 GitHub 链接复制文档 Markdown 到剪贴板
Intlayer 编译器 | 用于 i18n 的自动内容提取
什么是 Intlayer 编译器?
Intlayer 编译器 是一个强大的工具,旨在自动化您应用程序中的国际化(i18n)流程。它会扫描您的源代码(JSX、TSX、Vue、Svelte)中的内容声明,提取它们,并自动生成所需的字典文件。这使您能够将内容与组件放置在一起,而 Intlayer 则负责管理和同步您的字典。
为什么使用 Intlayer 编译器?
- 自动化:消除手动将内容复制粘贴到字典中的步骤。
- 速度:优化的内容提取,确保构建过程保持快速。
- 开发者体验:将内容声明保留在使用它们的位置,提高可维护性。
- 实时更新:支持热模块替换(HMR),在开发过程中即时反馈。
请参阅Compiler vs. Declarative i18n博客文章,了解更深入的比较。
为什么不使用 Intlayer 编译器?
虽然编译器提供了出色的"开箱即用"体验,但它也引入了一些您应该了解的权衡:
- 启发式歧义:编译器必须猜测什么是面向用户的内容,什么是应用程序逻辑(例如,
className="active"、状态代码、产品 ID)。在复杂的代码库中,这可能导致误报或遗漏的字符串,需要手动注释和异常处理。 - 仅静态提取:基于编译器的提取依赖于静态分析。仅在运行时存在的字符串(API 错误代码、CMS 字段等)无法被编译器单独发现或翻译,因此您仍然需要补充的运行时 i18n 策略。
有关更深入的架构比较,请参阅博客文章Compiler vs. Declarative i18n。
作为替代方案,为了在保持对内容的完全控制的同时自动化您的 i18n 流程,Intlayer 还提供了自动提取命令 intlayer extract(请参阅CLI 文档),或 Intlayer VS Code 扩展的 Intlayer: extract content to Dictionary 命令(请参阅VS Code 扩展文档)。
使用方法
Vite
对于基于 Vite 的应用(React、Vue、Svelte 等),使用编译器最简单的方法是通过 vite-intlayer 插件。
安装
复制代码到剪贴板
配置
更新你的 vite.config.ts,以包含 intlayerCompiler 插件:
复制代码到剪贴板
See complete tutorial: Intlayer Compiler with Vite+React
框架支持
Vite 插件会自动检测并处理不同的文件类型:
- React / JSX / TSX:原生支持。
- Vue:需要安装
@intlayer/vue-compiler。 - Svelte:需要安装
@intlayer/svelte-compiler。
请确保为你的框架安装了相应的编译器包:
复制代码到剪贴板
自定义配置
要自定义编译器的行为,您可以更新项目根目录中的 intlayer.config.ts 文件。
复制代码到剪贴板
编译器配置参考
可以在 intlayer.config.ts 文件的 compiler 块中配置以下属性:
enabled:
- 类型:
boolean | 'build-only' - 默认值:
true - 描述: 指示是否应启用编译器。
- 类型:
dictionaryKeyPrefix:
- 类型:
string - 默认值:
'' - 描述: 提取的字典键的前缀。
- 类型:
transformPattern:
- 类型:
string | string[] - 默认值:
['**/*.{js,ts,mjs,cjs,jsx,tsx,vue,svelte}', '!**/node_modules/**'] - 描述: (已弃用:请改为使用
build.traversePattern) 遍历代码进行优化的模式。
- 类型:
excludePattern:
- 类型:
string | string[] - 默认值:
['**/node_modules/**'] - 描述: (已弃用:请改为使用
build.traversePattern) 优化中排除的模式。
- 类型:
output:
- 类型:
FilePathPattern - 默认值:
({ key }) => 'compiler/${key}.content.json' - 描述: 定义输出文件路径。替换
outputDir。处理动态变量,如{{locale}}、{{key}}、{{fileName}}、{{extension}}、{{format}}、{{dirPath}}、{{componentFileName}}、{{componentExtension}}、{{componentFormat}}。可以设置为字符串(使用'my/{{var}}/path'格式)或函数。 - 注意:
./**/*路径相对于组件解析。/**/*路径相对于 Intlayer 的baseDir解析。 - 注意: 如果路径中定义了语言,字典将按语言生成。
- 示例:
output: ({ locale, key }) => 'compiler/${locale}/${key}.json'
- 类型:
noMetadata:
- 类型:
boolean - 默认值:
false - 描述: 指示是否应在文件中保存元数据。如果为 true,编译器将不会保存字典的元数据(键、内容包装器)。
- 注意: 如果与
loadJSON插件一起使用,则非常有用。 - 示例:
如果为
true:json { "key": "value" }如果为false:json { "key": "value", "content": { "key": "value" } }
- 类型:
saveComponents:
- 类型:
boolean - 默认值:
false - 描述: 指示在转换后是否应保存组件。
- 如果为
true,编译器将重写磁盘中的组件文件。转换将是永久性的,编译器随后可以被移除。 - 如果为
false,编译器仅在构建输出中将useIntlayer()函数调用注入代码中,并保持基础代码库不变。转换将仅在内存中进行。
- 如果为
- 类型:
填充缺失的翻译
Intlayer 提供了一个 CLI 工具来帮助您填充缺失的翻译。您可以使用 intlayer 命令来测试并从代码中填充缺失的翻译。
复制代码到剪贴板
复制代码到剪贴板
提取
Intlayer 提供了一个 CLI 工具来从您的代码中提取内容。您可以使用 intlayer extract 命令从代码中提取内容。
复制代码到剪贴板
有关更多详细信息,请参阅 CLI 文档