使用您最喜欢的AI助手总结文档,并引用此页面和AI提供商
此页面的内容已使用 AI 翻译。
查看英文原文的最新版本如果您有改善此文档的想法,请随时通过在GitHub上提交拉取请求来贡献。
文档的 GitHub 链接复制文档 Markdown 到剪贴板
Intlayer v8 新功能 - 有什么新变化?
欢迎使用 Intlayer v8!此版本侧重于通过自动内容检测提升开发者体验、通过 schema 验证确保数据完整性,并为字典管理提供更细粒度的控制。
目录
富内容演进:Markdown & HTML
Intlayer v8 对富内容的处理方式进行了重大改进,引入了 HTML 节点(v7 中不存在),并统一了与 Markdown 节点(v7 中已存在但经过增强)的 API。
统一的 .use() API
我们为 Markdown 和 HTML 节点引入了 .use() 方法。此方法允许你自定义渲染过程中使用的 HTML 标签或组件。
- 组件替换:你可以轻松地将 HTML 标签或自定义组件替换为你自己的框架组件(例如,将
<a>替换为NextLink,或将<CustomCmp>替换为 React 组件)。 - 类型安全:所有提供组件的函数都是完全类型化 (fully typed)的,确保你接收到正确的 props。
默认渲染行为
在 v7 中,如果没有定义 provider,Markdown 节点会被渲染为原始字符串,通常需要外部库进行解析。
在 v8 中,Intlayer 包含了其内部的 Markdown 解析器。 默认情况下,Markdown 节点现在直接渲染为 HTML,无需任何外部库。
新的 Renderer 和 Provider 实用工具
我们引入了新的独立渲染函数和组件,以便在标准 useIntlayer 流程之外给你更多控制。
- Markdown:
MarkdownRenderer,useMarkdownRenderer,renderMarkdown。(注意:MarkdownProvider在 v7 中已存在,但现在与这些新工具集成)。 - HTML:
HTMLRenderer,useHTMLRenderer,renderHTML,HTMLProvider。
示例:Markdown 渲染工具
1. 使用组件:
复制代码到剪贴板
2. 使用 Hook:
复制代码到剪贴板
3. 使用实用函数:
复制代码到剪贴板
1. 使用组件:
复制代码到剪贴板
1. 使用组件:
复制代码到剪贴板
2. 使用 Hook:
复制代码到剪贴板
3. 使用实用函数:
复制代码到剪贴板
1. 使用服务:
复制代码到剪贴板
1. 使用组件:
复制代码到剪贴板
2. 使用 Hook:
复制代码到剪贴板
3. 使用实用函数:
复制代码到剪贴板
1. 使用组件:
复制代码到剪贴板
2. 使用 Hook:
复制代码到剪贴板
3. 使用实用函数:
复制代码到剪贴板
示例:HTML 渲染工具
1. 使用组件:
复制代码到剪贴板
2. 使用 Hook:
复制代码到剪贴板
3. 使用实用函数:
复制代码到剪贴板
1. 使用组件:
复制代码到剪贴板
1. 使用组件:
复制代码到剪贴板
2. 使用 Hook:
复制代码到剪贴板
3. 使用实用函数:
复制代码到剪贴板
1. 直接用法:
在 Angular 中,你可以使用标准的 [innerHTML] 绑定。
复制代码到剪贴板
1. 使用组件:
复制代码到剪贴板
2. 使用 Hook:
复制代码到剪贴板
3. 使用实用函数:
复制代码到剪贴板
1. 使用组件:
复制代码到剪贴板
2. 使用 Hook:
复制代码到剪贴板
3. 使用实用函数:
复制代码到剪贴板
欲了解更多详情,请参阅 HTML 内容文档 和 Markdown 文档。
YAML & Markdown 内容文件 (v8.10.0)
您现在可以直接使用 .content.md 和 .content.yaml 文件扩展名声明内容。这非常适合长篇内容、博客、文档和隐私政策。
这些文件可以从可视化编辑器完全编辑,为非技术团队成员提供了简化的工作流程。
有关更多详细信息,请参阅 YAML 内容文件文档 和 Markdown 内容文件文档。
自定义 URL 重写
Intlayer v8 引入对 自定义 URL 重写 的支持,允许你定义与标准 /locale/path 结构不同的特定语言路径。此功能可显著提升本地 SEO,并为非英文用户提供更自然的使用体验。
v8 的主要增强:
- Framework Formatters: 新增
nextjsRewrite、svelteKitRewrite、reactRouterRewrite、vueRouterRewrite、solidRouterRewrite、tanstackRouterRewrite、nuxtRewrite和viteRewrite,为每种路由器提供符合惯用语法的模式。 useRewriteURLHook: 一个新的客户端 Hook,它在不触发路由导航的情况下静默地将地址栏更正为更友好的本地化 URL。- 自动 SEO 重定向: 内置代理现在会自动将用户从手动输入的规范路径(例如
/fr/about)重定向到它们更优雅的本地化版本(例如/fr/a-propos)。
示例配置:
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
此功能通过 Intlayer 代理在 Next.js 和 Vite 中开箱即用,并且可以轻松集成到其他路由器,例如 TanStack Router、React Router、Vue Router、SvelteKit 和 Solid Router。
有关更多信息和集成指南,请参阅 自定义 URL 重写文档。
增强的插入值
在 v8 中,插入值现在除了字符串和数字之外,还能接受 React 元素(或 Vue 节点)。这允许你将丰富的交互式组件直接注入到插入模板中。
Intlayer 现在可以稳健地处理插入中的嵌套 React 和 Preact 节点,确保复杂的 UI 结构得到保留并正确渲染。
示例:
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
Unicode CLDR 复数规则 (v8.8.0)
基于 Unicode CLDR 项目定义的复数规则,引入了一个新的 plural 节点助手,改进了对复杂语言的支持。
复制代码到剪贴板
然后,你可以在你的框架组件中动态传递计数:
复制代码到剪贴板
更多信息,请参见 复数化文档。
内容 Schema 验证
Intlayer v8 为字典引入了 schema 验证。你现在可以在配置中使用 Zod 定义可重用的验证 schema,并将其应用到你的内容文件中。这可以确保你的内容始终遵循预期的结构,并在构建时 (build time)捕获错误。
1. 定义 Schemas
在 intlayer.config.ts 中定义你的 schemas:
复制代码到剪贴板
2. 将 Schemas 应用到字典
在字典定义中引用 schema 键:
复制代码到剪贴板
如果内容不符合模式(例如,title 太短),构建过程将抛出错误。
TypeScript: IntlayerNode Primitive Accessors
IntlayerNode 类型已更新,允许直接在内容节点上调用原始 JavaScript 方法。这使得可以直接与本地化内容交互,就像它是一个标准字符串、数字、布尔值或数组原始类型一样。
支持 React、Preact、Solid、Svelte、Vue 和 Angular。
String 示例
复制代码到剪贴板
Array Example
复制代码到剪贴板
增强的自动内容检测
在 v8 中,Intlayer 能智能检测内容字符串中的 Markdown 语法、HTML 标签和变量插入。这意味着通常可以省略像 md()、html() 或 insert() 这样的辅助函数。
此行为默认启用。您现在可以在全局的 intlayer.config.ts 中或针对每个字典细化此检测。
细粒度控制
您可以启用或禁用特定类型的转换:
复制代码到剪贴板
v7 行为(手动包裹):
复制代码到剪贴板
v8 行为(自动检测):
复制代码到剪贴板
底层的 JSON 结果保持不变,保留渲染所需的丰富类型信息:
复制代码到剪贴板
本地化:新的 useIntl 钩子
现在在 React、Next.js 和 Vue 中可以使用新的 useIntl() 钩子。它提供了一个与语言环境绑定的 Intl 对象,能够自动使用当前语言来格式化数字、日期等,而无需手动传入 locale。
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
复制代码到剪贴板
工具:VSCode 扩展增强
Intlayer 的 VSCode 扩展在 v8 中迎来重大更新,以简化你的国际化工作流程:
- 启动时间:打开项目时的性能改进。
- 缓存:增强的缓存层,实现接近即时的验证和自动补全。
- 未使用键与重复键检测:新增功能,可自动检测字典中的 未使用键 和 重复键,帮助你保持内容整洁且高效。
工具:C++ Watcher & OXC-based LSP (v8.12.0)
Intlayer v8.12.0 为开发者体验带来了重大改进:
- Parcel Watcher:内容监听器已从
chokidar迁移到@parcel/watcher,利用原生 C++ 文件监听来提供更快的更新和显著降低的内存消耗。 - 新的语言服务器协议 (LSP):一个全新的 LSP 现已推出。采用基于 OXC 的解析构建,它帮助您的 IDE 和 AI 代理无缝链接
useIntlayer('my-key')调用与其对应的.content文件,反之亦然。
有关详细信息,请参阅 LSP 文档。
编译器优化
Intlayer v8 为 Markdown 和 HTML 编译器引入了新的缓存层。这确保在相同配置下相同的内容字符串只被解析一次,从而显著降低在重新渲染或在多个地方使用相同内容时的开销。
复制代码到剪贴板
复制代码到剪贴板
对于 vue / svelte,您需要安装相应的编译器包:
bash复制代码复制代码到剪贴板
bash复制代码复制代码到剪贴板
实验性构建优化:代码缩小和清理 (v8.7.0)
Intlayer v8.7.0 在你的 intlayer.config.ts 中引入了新的实验性构建功能,旨在优化你的生产包:
- 字典缩小化:缩小字典文件以减小大小。
- 未使用密钥清理:扫描并从字典中移除未使用的翻译密钥,将活跃密钥重命名为短字符(例如
"products" -> "a"、"pricing" -> "b")。这可将包大小减少多达 5%。 - 禁用 TypeScript 检查:通过在编译步骤中禁用 TypeScript 类型检查来加快构建速度。
复制代码到剪贴板
灵活性:统一导入模式
live 布尔属性已被弃用,改用更为全面的 importMode 属性。这样可以明确定义 dictionaries 应如何加载:静态、动态,或通过实时同步。
模式
static(默认):dictionary 在构建时 (build time)被打包。性能最佳。dynamic:dictionary 在运行时加载(例如,通过 JSON fetch 或 suspense)。fetch:dictionary 在运行时从 CMS/服务器 获取并同步。
迁移:
在弹窗中打开表格以清晰地查看所有数据
| v7 配置 | v8 配置 |
|---|---|
live: true | importMode: 'fetch' |
live: false | importMode: 'static'(或 'dynamic') |
注意:在 Intlayer v8 中,importMode 属性已从 build 配置移动到 intlayer.config.ts 中的 dictionary 配置。这样可以为所有字典定义一个默认的导入模式,同时仍然可以在每个字典级别上覆盖该设置。
全局配置示例:
复制代码到剪贴板
字典示例:
复制代码到剪贴板
字典位置控制
v8 引入了 location 属性,用于明确管理字典的位置以及它们如何同步。这在涉及本地文件和远程 CMS 内容的混合工作流中特别有用。
选项
local:字典仅存在于本地。它不会被推送到远程 CMS。remote:字典由远程管理。一旦在 CMS 上推送,它将与本地分离。远程字典将从 CMS 拉取。local_and_remote:字典同时存在于两处。本地更改会被推送,远程更改会被拉取(同步)。
示例:
复制代码到剪贴板
系统配置分离
Intlayer v8 将内容源配置与内部 system 和输出路径分离。这使得 content 属性更简洁,并且明确哪些设置由用户管理,哪些由 Intlayer 系统管理。
以下属性已从 content 移动到 intlayer.config.ts 中的新 system 属性:
dictionariesDirmoduleAugmentationDirunmergedDictionariesDirtypesDirmainDirconfigDircacheDiroutputFilesPatternWithPath
v7 行为:
复制代码到剪贴板
v8 行为:
复制代码到剪贴板
内容目录与代码目录分离
Intlayer v8 将内容定义文件的配置与代码转换的配置分离。这使得监视和扫描更加精确,从而提升构建性能。
此前,contentDir 同时用于监视 .content.* 文件和扫描代码中的 useIntlayer 调用。现在:
contentDir:专用于内容声明文件。codeDir:专用于需要进行转换的应用代码(例如:剪枝、优化)。
迁移:
如果你之前设置过 contentDir,Intlayer v8 将把它也作为 codeDir 的默认值,但会记录一个警告。你应该在配置中显式定义 codeDir。
v7 行为:
复制代码到剪贴板
v8 行为:
复制代码到剪贴板
框架:Svelte 改进
在 Svelte 中的 Markdown 和 HTML 内容在被字符串化(stringified)时现在会自动解析为 HTML。这样与 Svelte 的 {@html} 语法一起使用更加方便,因为你现在可以直接传递内容节点。
Angular 支持:Vite Bundler (v8.11.0)
对于 Angular 用户,Intlayer 现在通过新的自定义 esbuild 插件原生支持 Vite bundler,加快了开发和构建时间。
有关配置详情,请参阅 Angular 环境文档。
网站地图生成 (v8.6.0)
Intlayer 现在根据您的语言环境和路由模式自动生成网站地图。这对于 TanStack Router 等路由架构中的 SEO 优化特别有用:
复制代码到剪贴板
从 v7 的迁移说明
配置更改
live属性:字典中的live属性已被移除。请改用importMode: 'fetch'。- importMode:配置中的
build.importMode属性已被弃用。请改用dictionary.importMode。 contentDir和codeDir:contentDir现在专用于内容文件。新增codeDir属性用于代码转换。如果未设置codeDir,Intlayer 将回退到使用contentDir并记录一个警告。- 模式验证:要使用新的
schema功能,请确保在项目中已安装zod。
