Skip to content

Commit 52b55bf

Browse files
JusterZhuclaude
andcommitted
docs: component table cleanup, cookbook UAC notes, contact page, i18n fixes
- Remove 返回值 (return value) column from instance method tables in all 5 component docs (Core, Differential, Drivelution, Bowl, Extension) across default zh-Hans and zh-Hans i18n versions - Add installation directory UAC/permission notes to Beginner cookbook in all 3 locales (zh-Hans default, zh-Hans i18n, en i18n) - Create /contact page with QQ group (748744489) and email contact info, supporting both Chinese and English - Add '联系方式 / Contact' navbar item on the right side - Fix homepage to respect locale: translate hero subtitle, feature cards, tech stack title, and page meta to English when viewing in en mode - Fix homepage CTA button (开始探索 / Get Started) to link to cookbook instead of GeneralSpacestation - Translate 2026-05-20 releaselog entry from Chinese to English in en i18n Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 770df40 commit 52b55bf

17 files changed

Lines changed: 325 additions & 186 deletions

File tree

website/docs/doc/GeneralUpdate.Bowl.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,15 @@ sidebar_position: 3
9898

9999
**Bowl:**
100100

101-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
102-
| --- | --- | --- | --- | --- |
103-
| `LaunchAsync(BowlContext, CancellationToken)` | `context` — 执行上下文(建议先调 `Normalize()`);`ct` — 取消令牌 | `Task<BowlResult>` | 启动崩溃监控守护流程 | 三阶段:准备监控 → 运行监控 → 检测到 Dump 则进入故障处理管线 |
101+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
102+
| --- | --- | --- | --- |
103+
| `LaunchAsync(BowlContext, CancellationToken)` | `context` — 执行上下文(建议先调 `Normalize()`);`ct` — 取消令牌 | 启动崩溃监控守护流程 | 三阶段:准备监控 → 运行监控 → 检测到 Dump 则进入故障处理管线 |
104104

105105
**BowlContext:**
106106

107-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
108-
| --- | --- | --- | --- | --- |
109-
| `Normalize()` || `BowlContext` | 应用默认值(`WorkModel``"Upgrade"``TimeoutMs``30000``DumpType``Full`| 返回新实例,不修改原实例 |
107+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
108+
| --- | --- | --- | --- |
109+
| `Normalize()` || 应用默认值(`WorkModel``"Upgrade"``TimeoutMs``30000``DumpType``Full`| 返回新实例,不修改原实例 |
110110

111111
### 3.3 回调事件
112112

website/docs/doc/GeneralUpdate.Core.md

Lines changed: 71 additions & 71 deletions
Large diffs are not rendered by default.

website/docs/doc/GeneralUpdate.Differential.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,10 @@ Differential 本身是底层库,不提供配置类。所有参数通过构造
9999

100100
**IBinaryDiffer:**
101101

102-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
103-
| --- | --- | --- | --- | --- |
104-
| `CleanAsync(string, string, string, CancellationToken)` | `oldFilePath` — 旧文件路径;`newFilePath` — 新文件路径;`patchFilePath` — 补丁输出路径;`cancellationToken` | `Task` | 发布/构建阶段生成补丁 | 大文件取消不会立即响应,需等待当前文件处理完成 |
105-
| `DirtyAsync(string, string, string, CancellationToken)` | `oldFilePath` — 旧文件路径;`newFilePath` — 补丁还原后文件输出路径;`patchFilePath` — 补丁文件路径;`cancellationToken` | `Task` | 客户端升级阶段应用补丁 | 不会直接覆盖旧文件,结果写入 `newFilePath` |
102+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
103+
| --- | --- | --- | --- |
104+
| `CleanAsync(string, string, string, CancellationToken)` | `oldFilePath` — 旧文件路径;`newFilePath` — 新文件路径;`patchFilePath` — 补丁输出路径;`cancellationToken` | 发布/构建阶段生成补丁 | 大文件取消不会立即响应,需等待当前文件处理完成 |
105+
| `DirtyAsync(string, string, string, CancellationToken)` | `oldFilePath` — 旧文件路径;`newFilePath` — 补丁还原后文件输出路径;`patchFilePath` — 补丁文件路径;`cancellationToken` | 客户端升级阶段应用补丁 | 不会直接覆盖旧文件,结果写入 `newFilePath` |
106106

107107
### 3.3 回调事件
108108

website/docs/doc/GeneralUpdate.Drivelution.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -124,26 +124,26 @@ sidebar_position: 8
124124

125125
**GeneralDrivelution(静态类):**
126126

127-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
128-
| --- | --- | --- | --- | --- |
129-
| `Create(DrivelutionOptions?)` | `options` — 全局选项 | `IGeneralDrivelution` | 创建当前平台的驱动更新器 | 自动检测平台 |
130-
| `Create(IServiceProvider)` | `serviceProvider` — DI 容器 | `IGeneralDrivelution` | 从 DI 容器解析 | 未注册时回退到自动平台创建 |
131-
| `QuickUpdateAsync(DriverInfo, UpdateStrategy?, IProgress<UpdateProgress>?, CancellationToken)` | `driverInfo` — 驱动信息;`strategy` — 可选策略(null 时使用默认);`progress` — 进度报告;`ct` — 取消令牌 | `Task<UpdateResult>` | 快速单驱动更新 | 使用安全默认策略 |
132-
| `ValidateAsync(DriverInfo, CancellationToken)` | `driverInfo` — 驱动信息;`ct` — 取消令牌 | `Task<bool>` | 单独验证驱动文件 ||
133-
| `GetPlatformInfo()` || `PlatformInfo` | 查询当前平台信息 | 返回 OS/架构/版本/是否支持 |
134-
| `GetDriversFromDirectoryAsync(string, string?, CancellationToken)` | `directoryPath` — 目录路径;`searchPattern` — 搜索模式;`ct` — 取消令牌 | `Task<List<DriverInfo>>` | 扫描目录解析驱动信息 | 默认搜索模式与平台相关 |
135-
| `BatchUpdateAsync(IEnumerable<DriverInfo>, UpdateStrategy, BatchMode, IProgress<UpdateProgress>?, CancellationToken)` | `drivers` — 驱动列表;`strategy` — 更新策略;`mode` — 顺序/并行;`progress` — 进度;`ct` — 取消令牌 | `Task<BatchUpdateResult>` | 批量更新多个驱动 | 并行模式下底层系统工具可能竞争资源 |
127+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
128+
| --- | ---| --- | --- |
129+
| `Create(DrivelutionOptions?)` | `options` — 全局选项 | 创建当前平台的驱动更新器 | 自动检测平台 |
130+
| `Create(IServiceProvider)` | `serviceProvider` — DI 容器 | 从 DI 容器解析 | 未注册时回退到自动平台创建 |
131+
| `QuickUpdateAsync(DriverInfo, UpdateStrategy?, IProgress<UpdateProgress>?, CancellationToken)` | `driverInfo` — 驱动信息;`strategy` — 可选策略(null 时使用默认);`progress` — 进度报告;`ct` — 取消令牌 | 快速单驱动更新 | 使用安全默认策略 |
132+
| `ValidateAsync(DriverInfo, CancellationToken)` | `driverInfo` — 驱动信息;`ct` — 取消令牌 | 单独验证驱动文件 ||
133+
| `GetPlatformInfo()` || 查询当前平台信息 | 返回 OS/架构/版本/是否支持 |
134+
| `GetDriversFromDirectoryAsync(string, string?, CancellationToken)` | `directoryPath` — 目录路径;`searchPattern` — 搜索模式;`ct` — 取消令牌 | 扫描目录解析驱动信息 | 默认搜索模式与平台相关 |
135+
| `BatchUpdateAsync(IEnumerable<DriverInfo>, UpdateStrategy, BatchMode, IProgress<UpdateProgress>?, CancellationToken)` | `drivers` — 驱动列表;`strategy` — 更新策略;`mode` — 顺序/并行;`progress` — 进度;`ct` — 取消令牌 | 批量更新多个驱动 | 并行模式下底层系统工具可能竞争资源 |
136136

137137
**IGeneralDrivelution:**
138138

139-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
140-
| --- | --- | --- | --- | --- |
141-
| `UpdateAsync(...)` |`QuickUpdateAsync` | `Task<UpdateResult>` | 执行完整更新流水线 ||
142-
| `ValidateAsync(...)` |`GeneralDrivelution.ValidateAsync` | `Task<bool>` | 单独验证 ||
143-
| `BackupAsync(DriverInfo, string, CancellationToken)` | `driverInfo`, `backupPath`, `ct` | `Task<bool>` | 单独备份驱动文件 ||
144-
| `RollbackAsync(string, CancellationToken)` | `backupPath` — 备份路径;`ct` — 取消令牌 | `Task<bool>` | 从备份恢复驱动 | 不同平台恢复逻辑不同 |
145-
| `GetDriversFromDirectoryAsync(...)` |`GeneralDrivelution` | `Task<List<DriverInfo>>` | 扫描目录 ||
146-
| `BatchUpdateAsync(...)` |`GeneralDrivelution` | `Task<BatchUpdateResult>` | 批量更新 ||
139+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
140+
| --- | ---| --- | --- |
141+
| `UpdateAsync(...)` |`QuickUpdateAsync` | 执行完整更新流水线 ||
142+
| `ValidateAsync(...)` |`GeneralDrivelution.ValidateAsync` | 单独验证 ||
143+
| `BackupAsync(DriverInfo, string, CancellationToken)` | `driverInfo`, `backupPath`, `ct` | 单独备份驱动文件 ||
144+
| `RollbackAsync(string, CancellationToken)` | `backupPath` — 备份路径;`ct` — 取消令牌 | 从备份恢复驱动 | 不同平台恢复逻辑不同 |
145+
| `GetDriversFromDirectoryAsync(...)` |`GeneralDrivelution` | 扫描目录 ||
146+
| `BatchUpdateAsync(...)` |`GeneralDrivelution` | 批量更新 ||
147147

148148
### 3.3 回调事件
149149

website/docs/doc/GeneralUpdate.Extension.md

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -131,34 +131,34 @@ sidebar_position: 7
131131

132132
**IExtensionHost:**
133133

134-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
135-
| --- | --- | --- | --- | --- |
136-
| `QueryExtensionsAsync(ExtensionQueryDTO)` | `query` — 查询条件 | `Task<HttpResponseDTO<PagedResultDTO<ExtensionDTO>>>` | 搜索/浏览可用扩展 | 响应数据在 `Body.Items`|
137-
| `DownloadExtensionAsync(string, string)` | `extensionId` — 扩展 ID;`savePath` — 保存路径 | `Task<bool>` | 单独下载扩展包 | 支持 HTTP Range 断点续传 |
138-
| `UpdateExtensionAsync(string)` | `extensionId` — 扩展 ID | `Task<bool>` | 一键更新单个扩展(推荐入口) | 串起查询→兼容性→依赖→下载→校验→安装全流程 |
139-
| `InstallExtensionAsync(string, bool)` | `extensionPath` — ZIP 包路径;`rollbackOnFailure` — 是否失败回滚 | `Task<bool>` | 手动安装本地扩展包 | 仅接受 `.zip` 格式 |
140-
| `UpdateExtensionsAsync(IEnumerable<string>, CancellationToken)` | `extensionIds` — 扩展 ID 列表;`ct` — 取消令牌 | `Task<Dictionary<string, bool>>` | 批量更新 | 按传入顺序逐个处理 |
141-
| `UninstallExtensionAsync(string, CancellationToken)` | `extensionId` — 扩展 ID;`ct` — 取消令牌 | `Task<bool>` | 卸载扩展 | 移除 catalog 记录并删除扩展目录 |
142-
| `ActivateExtensionAsync(string, CancellationToken)` | `extensionId``ct` | `Task` | 激活扩展 | 调用生命周期钩子 |
143-
| `DeactivateExtensionAsync(string, CancellationToken)` | `extensionId``ct` | `Task` | 停用扩展 | 调用生命周期钩子 |
144-
| `IsExtensionCompatible(ExtensionMetadata)` | `extension` — 扩展元数据 | `bool` | 检查扩展兼容性 | 基于 `HostVersion``MinHostVersion`/`MaxHostVersion` 比较 |
145-
| `SetAutoUpdate(string, bool)` | `extensionId` — 扩展 ID;`autoUpdate` — 是否自动更新 | `void` | 设置单扩展自动更新开关 | 仅内存状态,不自动后台轮询 |
146-
| `SetGlobalAutoUpdate(bool)` | `enabled` — 是否启用 | `void` | 设置全局自动更新默认值 | 仅内存状态 |
134+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
135+
| --- | --- | --- | --- |
136+
| `QueryExtensionsAsync(ExtensionQueryDTO)` | `query` — 查询条件 | 搜索/浏览可用扩展 | 响应数据在 `Body.Items`|
137+
| `DownloadExtensionAsync(string, string)` | `extensionId` — 扩展 ID;`savePath` — 保存路径 | 单独下载扩展包 | 支持 HTTP Range 断点续传 |
138+
| `UpdateExtensionAsync(string)` | `extensionId` — 扩展 ID | 一键更新单个扩展(推荐入口) | 串起查询→兼容性→依赖→下载→校验→安装全流程 |
139+
| `InstallExtensionAsync(string, bool)` | `extensionPath` — ZIP 包路径;`rollbackOnFailure` — 是否失败回滚 | 手动安装本地扩展包 | 仅接受 `.zip` 格式 |
140+
| `UpdateExtensionsAsync(IEnumerable<string>, CancellationToken)` | `extensionIds` — 扩展 ID 列表;`ct` — 取消令牌 | 批量更新 | 按传入顺序逐个处理 |
141+
| `UninstallExtensionAsync(string, CancellationToken)` | `extensionId` — 扩展 ID;`ct` — 取消令牌 | 卸载扩展 | 移除 catalog 记录并删除扩展目录 |
142+
| `ActivateExtensionAsync(string, CancellationToken)` | `extensionId``ct` | 激活扩展 | 调用生命周期钩子 |
143+
| `DeactivateExtensionAsync(string, CancellationToken)` | `extensionId``ct` | 停用扩展 | 调用生命周期钩子 |
144+
| `IsExtensionCompatible(ExtensionMetadata)` | `extension` — 扩展元数据 | 检查扩展兼容性 | 基于 `HostVersion``MinHostVersion`/`MaxHostVersion` 比较 |
145+
| `SetAutoUpdate(string, bool)` | `extensionId` — 扩展 ID;`autoUpdate` — 是否自动更新 | 设置单扩展自动更新开关 | 仅内存状态,不自动后台轮询 |
146+
| `SetGlobalAutoUpdate(bool)` | `enabled` — 是否启用 | 设置全局自动更新默认值 | 仅内存状态 |
147147

148148
**GeneralExtensionHost 附加方法:**
149149

150-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
151-
| --- | --- | --- | --- | --- |
152-
| `IsAutoUpdateEnabled(string)` | `extensionId` — 扩展 ID | `bool` | 查询指定扩展的自动更新开关 | 单扩展设置优先于全局设置 |
150+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
151+
| --- | --- | --- | --- |
152+
| `IsAutoUpdateEnabled(string)` | `extensionId` — 扩展 ID | 查询指定扩展的自动更新开关 | 单扩展设置优先于全局设置 |
153153

154154
**ExtensionHostBuilder:**
155155

156-
| 方法名 | 入参明细 | 返回值 | 使用场景 | 注意事项 |
157-
| --- | --- | --- | --- | --- |
158-
| `ConfigureOptions(Action<ExtensionHostOptions>)` | `configure` — 配置委托 | `ExtensionHostBuilder` | 通过 Lambda 配置选项 ||
159-
| `WithOptions(ExtensionHostOptions)` | `options` — 选项对象 | `ExtensionHostBuilder` | 直接设置选项 ||
160-
| `ConfigureServices(Action<IServiceCollection>)` | `configure` — DI 注册委托 | `ExtensionHostBuilder` | 替换或添加服务 |`Build()` 前调用 |
161-
| `Build()` || `IExtensionHost` | 构建宿主实例 | 自动注册未覆盖的默认服务 |
156+
| 方法名 | 入参明细 | 使用场景 | 注意事项 |
157+
| --- | --- | --- | --- |
158+
| `ConfigureOptions(Action<ExtensionHostOptions>)` | `configure` — 配置委托 | 通过 Lambda 配置选项 ||
159+
| `WithOptions(ExtensionHostOptions)` | `options` — 选项对象 | 直接设置选项 ||
160+
| `ConfigureServices(Action<IServiceCollection>)` | `configure` — DI 注册委托 | 替换或添加服务 |`Build()` 前调用 |
161+
| `Build()` || 构建宿主实例 | 自动注册未覆盖的默认服务 |
162162

163163
### 3.3 回调事件
164164

website/docs/quickstart/Beginner cookbook.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,25 @@ Client (新版本):
371371
3. [GeneralUpdate.Bowl](../doc/GeneralUpdate.Bowl):崩溃监控、备份和失败恢复
372372
4. [GeneralUpdate.Tools](./GeneralUpdate.PacketTool):补丁包、Hash、OSS Config、Simulation 的完整操作指南
373373

374+
## 安装目录注意事项
375+
376+
更新过程中,应用程序需要对安装目录进行读写操作。为避免触发 Windows UAC(用户账户控制)弹窗,请将应用安装在以下非系统保护的目录:
377+
378+
| 推荐目录 | 路径示例 |
379+
| --- | --- |
380+
| 用户 AppData(推荐) | `C:\Users\<用户名>\AppData\Local\<你的应用名>\` |
381+
| 用户主目录 | `C:\Users\<用户名>\<你的应用名>\` |
382+
| 非系统盘自定义目录 | `D:\<你的应用名>\` |
383+
384+
**不推荐的目录:**
385+
386+
- `C:\Program Files\` — 需要管理员权限才能写入
387+
- `C:\Program Files (x86)\` — 需要管理员权限才能写入
388+
- `C:\Windows\` — 系统目录,禁止写入
389+
- 系统盘根目录(如 `C:\`) — 可能触发权限限制
390+
391+
> **提示**:如果在更新时遇到"权限不足"或 UAC 弹窗,请检查应用是否安装在不推荐的目录中。将应用迁移到用户目录通常可以解决此问题。
392+
374393
## 示例仓库
375394

376395
| 仓库 | 地址 |

website/docusaurus.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ const config = {
9292
},
9393
],
9494
},
95+
{
96+
to: '/contact',
97+
label: '联系方式',
98+
position: 'right',
99+
},
95100
{
96101
href: 'https://github.com/GeneralLibrary',
97102
label: 'GitHub',

website/i18n/en/docusaurus-plugin-content-docs/current/quickstart/Beginner cookbook.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,25 @@ After this flow works, read these pages in order:
373373
3. [GeneralUpdate.Bowl](../doc/GeneralUpdate.Bowl): crash monitoring, backup, and failure recovery
374374
4. [GeneralUpdate.Tools](./GeneralUpdate.PacketTool): complete guides for patches, hashes, OSS config, and simulation
375375

376+
## Installation directory notes
377+
378+
The update process requires read/write access to the application directory. To avoid Windows UAC (User Account Control) prompts, install your application in one of the following non-system-protected directories:
379+
380+
| Recommended directory | Example path |
381+
| --- | --- |
382+
| User AppData (recommended) | `C:\Users\<username>\AppData\Local\<YourApp>\` |
383+
| User home directory | `C:\Users\<username>\<YourApp>\` |
384+
| Custom non-system drive | `D:\<YourApp>\` |
385+
386+
**Not recommended:**
387+
388+
- `C:\Program Files\` — requires administrator privileges to write
389+
- `C:\Program Files (x86)\` — requires administrator privileges to write
390+
- `C:\Windows\` — system directory, write-protected
391+
- System drive root (e.g. `C:\`) — may trigger permission restrictions
392+
393+
> **Tip**: If you encounter "Access Denied" or UAC prompts during updates, check whether the application is installed in a non-recommended directory. Moving the application to a user directory usually resolves the issue.
394+
376395
## Sample repositories
377396

378397
| Repository | URL |

website/i18n/en/docusaurus-plugin-content-docs/current/releaselog/GeneralUpdateReleaselog.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ tags: [log]
99

1010
### 📍2026-05-20 — v10.5.0-beta.2
1111

12-
- **GeneralUpdate.Core**: 统一 `GeneralUpdateBootstrap` 入口,合并原 ClientCore Core 能力;新增 `SetSource()` 轻配置入口与 `generalupdate.manifest.json` 极简接入;重构下载子系统为可替换的 5 层模型(Source/Policy/Executor/Pipeline/Orchestrator);扩展点体系增至 10 个可替换接口
13-
- **GeneralUpdate.Bowl**: `BowlContext` 配置 API 稳定;优化 Windows/Linux/macOS ProcDump 集成
14-
- **GeneralUpdate.Differential**: 稳定 `IBinaryDiffer` 抽象;BSDIFF 4.0 + Streaming HDiff 双算法;BZip2 / Deflate 压缩
15-
- **GeneralUpdate.Drivelution**: 稳定跨平台驱动更新流水线;Windows pnputil / Linux insmod-dpkg-rpm / macOS kextload-installer
16-
- **GeneralUpdate.Extension**: 稳定 `IExtensionHost` 抽象;Zip Slip 安全解压;拓扑排序依赖解析
17-
- **文档**: 重构全部 5 个组件文档为统一模板;新增入门实战手册;新增软件外包服务页面
18-
- **Samples**: Hub 示例浏览器 9 个场景覆盖完整更新/OSS/静默/推送/差分/压缩/扩展/Bowl/驱动
12+
- **GeneralUpdate.Core**: Unified `GeneralUpdateBootstrap` entry point, merging original ClientCore and Core capabilities; added `SetSource()` lightweight config entry and `generalupdate.manifest.json` minimal setup; refactored download subsystem into replaceable 5-layer model (Source/Policy/Executor/Pipeline/Orchestrator); extension points increased to 10 replaceable interfaces
13+
- **GeneralUpdate.Bowl**: `BowlContext` configuration API stabilized; optimized Windows/Linux/macOS ProcDump integration
14+
- **GeneralUpdate.Differential**: Stabilized `IBinaryDiffer` abstraction; BSDIFF 4.0 + Streaming HDiff dual algorithm; BZip2 / Deflate compression
15+
- **GeneralUpdate.Drivelution**: Stabilized cross-platform driver update pipeline; Windows pnputil / Linux insmod-dpkg-rpm / macOS kextload-installer
16+
- **GeneralUpdate.Extension**: Stabilized `IExtensionHost` abstraction; Zip Slip safe extraction; topological sort dependency resolution
17+
- **Docs**: Refactored all 5 component docs with unified template; added Beginner cookbook; added software outsourcing service page
18+
- **Samples**: Hub sample browser with 9 scenarios covering full update/OSS/silent/push/differential/compression/extension/Bowl/driver
1919

2020
### 📍2026-04-10
2121

website/i18n/en/docusaurus-theme-classic/navbar.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
"message": "Pricing",
1616
"description": "Navbar item with label 定价"
1717
},
18+
"item.label.联系方式": {
19+
"message": "Contact",
20+
"description": "Navbar item with label 联系方式"
21+
},
1822
"item.label.GitHub": {
1923
"message": "GitHub",
2024
"description": "Navbar item with label GitHub"

0 commit comments

Comments
 (0)