feat(i18n): add missing zh-Hans translations (#15032)

## Summary

This PR completes the missing Simplified Chinese (`zh-Hans`) i18n
resource coverage.

The current i18n completeness calculation is based on key coverage
between `en.json` and each locale resource file. Before this change,
`zh-Hans.json` contained 2331 keys while `en.json` contained 2406 keys,
resulting in a displayed completeness of 97%.

This change adds the 75 missing `zh-Hans` translation entries and
updates the generated completeness value for `zh-Hans` from 97% to 100%.

## Changes

- Added 75 missing Simplified Chinese translations to
`packages/frontend/i18n/src/resources/zh-Hans.json`.
- Updated `packages/frontend/i18n/src/i18n-completenesses.json` so
`zh-Hans` now reports 100% completeness.
- Kept the scope limited to missing i18n resource keys only.

## Notes

This PR does not modify existing `zh-Hans` translations, terminology
choices, or hardcoded English UI strings outside the i18n resource
files.

## Verification

- Confirmed `zh-Hans.json` parses successfully.
- Confirmed `zh-Hans.json` now has full key coverage against `en.json`.
- Confirmed missing key count is 0.
- Confirmed computed `zh-Hans` completeness is 100%.
- Ran pre-commit checks:
  - `yarn lint-staged`
  - `yarn lint:ox`

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Completed Chinese (Simplified) translations with 100% coverage for the
application.
* Added new translations across multiple areas: appearance and image
settings, export functionality, document import from Bear and Obsidian,
analytics and viewer information, editor settings including auto-date
titles and icon options, workspace sharing controls, calendar
integration with CalDAV support, share menu tooltips, and comprehensive
error messages.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/15032?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
xuzhi
2026-05-28 05:15:13 +08:00
committed by GitHub
parent 4f14e8840c
commit 66a6a5fffc
2 changed files with 76 additions and 1 deletions
@@ -22,7 +22,7 @@
"sv-SE": 93,
"uk": 93,
"ur": 100,
"zh-Hans": 97,
"zh-Hans": 100,
"zh-Hant": 93,
"tr": 100
}
@@ -228,6 +228,9 @@
"com.affine.appearanceSettings.color.title": "配色方案",
"com.affine.appearanceSettings.customize-theme.description": "在此编辑所有AFFiNE主题变量",
"com.affine.appearanceSettings.customize-theme.title": "自定义主题",
"com.affine.appearanceSettings.images.title": "图片",
"com.affine.appearanceSettings.images.antialiasing.title": "平滑图片渲染",
"com.affine.appearanceSettings.images.antialiasing.description": "禁用后,图片将使用最近邻缩放渲染,以保持像素清晰。",
"com.affine.appearanceSettings.customize-theme.reset": "重置所有",
"com.affine.appearanceSettings.customize-theme.open": "打开主题编辑器",
"com.affine.appearanceSettings.font.description": "选择您的字体样式",
@@ -446,6 +449,8 @@
"com.affine.copy.asImage.notAvailable.action": "下载客户端",
"com.affine.copy.asImage.success": "图片已复制",
"com.affine.copy.asImage.failed": "图片复制失败",
"com.affine.export.copy-markdown": "复制为 Markdown",
"com.affine.export.copied-as-markdown": "已复制为 Markdown",
"com.affine.confirmModal.button.cancel": "取消",
"com.affine.confirmModal.button.ok": "确认",
"com.affine.currentYear": "今年",
@@ -609,6 +614,8 @@
"com.affine.import-clipper.dialog.errorLoad": "读取内容失败,请重试。",
"com.affine.import_file": "支持 Markdown/Notion",
"com.affine.import.affine-workspace-data": "AFFiNE 工作区数据",
"com.affine.import.bear": "Bear.bear2bk,实验性)",
"com.affine.import.bear.tooltip": "导入你的 Bear 笔记备份。标签将转换为 AFFiNE 标签和文件夹。",
"com.affine.import.docx": "Microsoft Word (.docx)",
"com.affine.import.docx.tooltip": "导入你的 .docx 文件。",
"com.affine.import.html-files": "HTML",
@@ -619,6 +626,8 @@
"com.affine.import.modal.tip": "如果您希望请求支持其他文件类型,请随时告诉我们",
"com.affine.import.notion": "Notion",
"com.affine.import.notion.tooltip": "导入您的 Notion 数据。支持导入格式:HTML 带子页面。",
"com.affine.import.obsidian": "Obsidian 仓库(实验性)",
"com.affine.import.obsidian.tooltip": "导入 Obsidian 仓库。选择一个文件夹以导入所有笔记、图片和资源,并解析 wiki 链接。",
"com.affine.import.snapshot": "快照",
"com.affine.import.snapshot.tooltip": "导入您的 AFFiNE 工作区和页面快照文件。",
"com.affine.import.dotaffinefile": ".affine 文件",
@@ -1131,6 +1140,22 @@
"com.affine.payment.license-success.hint": "您可以在 设置 > 工作区 > 许可证 > 使用已购买的密钥 中使用此密钥进行升级",
"com.affine.payment.license-success.open-affine": "打开 AFFiNE",
"com.affine.payment.license-success.copy": "复制密钥到剪贴板",
"com.affine.doc.analytics.title": "查看访问分析",
"com.affine.doc.analytics.summary.total": "(共 {{count}} 次)",
"com.affine.doc.analytics.window.last-days": "最近 {{days}} 天",
"com.affine.doc.analytics.metric.total": "总计",
"com.affine.doc.analytics.metric.unique": "独立",
"com.affine.doc.analytics.metric.guest": "访客",
"com.affine.doc.analytics.chart.total-views": "总浏览量",
"com.affine.doc.analytics.chart.unique-views": "独立浏览量",
"com.affine.doc.analytics.error.load-analytics": "无法加载分析数据。",
"com.affine.doc.analytics.error.load-viewers": "无法加载查看者。",
"com.affine.doc.analytics.empty.no-page-views": "此时间范围内没有页面浏览。",
"com.affine.doc.analytics.empty.no-viewers": "此时间范围内没有查看者。",
"com.affine.doc.analytics.viewers.title": "查看者",
"com.affine.doc.analytics.viewers.show-all": "显示所有查看者",
"com.affine.doc.analytics.paywall.open-pricing": "打开定价方案",
"com.affine.doc.analytics.paywall.toast": "超过 7 天的文档分析需要 AFFiNE Team 订阅。",
"com.affine.peek-view-controls.close": "关闭",
"com.affine.peek-view-controls.open-doc": "打开这篇文档",
"com.affine.peek-view-controls.open-doc-in-edgeless": "在无界中打开",
@@ -1345,10 +1370,22 @@
"com.affine.settings.editorSettings.general.default-code-block.wrap.title": "在代码块中自动换行",
"com.affine.settings.editorSettings.general.default-new-doc.description": "创建文档的预设模式",
"com.affine.settings.editorSettings.general.default-new-doc.title": "创建文档的预设模式",
"com.affine.settings.editorSettings.general.auto-date-title.title": "用当前日期自动命名新文档",
"com.affine.settings.editorSettings.general.auto-date-title.description": "自动用今天的日期命名空白新文档。",
"com.affine.settings.editorSettings.general.auto-date-title.format.title": "新文档日期格式",
"com.affine.settings.editorSettings.general.auto-date-title.format.description": "选择自动新文档标题使用的日期格式。",
"com.affine.settings.editorSettings.general.auto-date-title.format.dd-mm-yyyy": "DD-MM-YYYY",
"com.affine.settings.editorSettings.general.auto-date-title.format.mm-dd-yyyy": "MM-DD-YYYY",
"com.affine.settings.editorSettings.general.auto-date-title.format.yyyy-mm-dd": "YYYY-MM-DD",
"com.affine.settings.editorSettings.general.auto-date-title.format.journal": "日记样式(本地化)",
"com.affine.settings.editorSettings.general.add-icon-option.title": "显示添加图标选项",
"com.affine.settings.editorSettings.general.add-icon-option.description": "显示或隐藏无图标文档的添加图标选项。",
"com.affine.settings.editorSettings.general.font-family.custom.description": "自定义您的文本体验。",
"com.affine.settings.editorSettings.general.font-family.custom.title": "自定义字体",
"com.affine.settings.editorSettings.general.font-family.description": "选择编辑器使用的字体。",
"com.affine.settings.editorSettings.general.font-family.title": "字体",
"com.affine.settings.editorSettings.general.font-size.description": "调整基础字号以提升可读性。",
"com.affine.settings.editorSettings.general.font-size.title": "字号",
"com.affine.settings.editorSettings.general.spell-check.description": "自动检测并纠正拼写错误。",
"com.affine.settings.editorSettings.general.spell-check.title": "拼写检查",
"com.affine.settings.editorSettings.general.spell-check.restart-hint": "设置已更改;请重新启动应用程序。<1>重新启动</1>",
@@ -1672,6 +1709,8 @@
"com.affine.settings.workspace.sharing.title": "分享",
"com.affine.settings.workspace.sharing.url-preview.description": "允许 Slack 和其他社交应用程序展开 URL,即使文档仅由工作区成员访问。",
"com.affine.settings.workspace.sharing.url-preview.title": "始终启用 URL 预览",
"com.affine.settings.workspace.sharing.workspace-sharing.description": "控制此工作区中的页面是否可以公开分享。关闭后将阻止新的分享,并禁止外部访问现有分享。",
"com.affine.settings.workspace.sharing.workspace-sharing.title": "允许工作区页面分享",
"com.affine.settings.workspace.affine-ai.title": "AFFiNE AI",
"com.affine.settings.workspace.affine-ai.label": "启用 AFFiNE AI 助手",
"com.affine.settings.workspace.affine-ai.description": "允许工作区成员使用 AFFiNE AI 功能。此设置不会影响计费。工作区成员通过个人帐户使用 AFFiNE AI。",
@@ -1736,6 +1775,7 @@
"com.affine.share-menu.option.link.no-access.description": "只有此工作区的成员可以打开此链接。",
"com.affine.share-menu.option.link.readonly": "只读",
"com.affine.share-menu.option.link.readonly.description": "任何人可以访问该链接",
"com.affine.share-menu.workspace-sharing.disabled.tooltip": "此工作区已关闭分享。请联系管理员启用。",
"com.affine.share-menu.option.permission.can-manage": "可管理",
"com.affine.share-menu.option.permission.can-edit": "可编辑",
"com.affine.share-menu.option.permission.can-read": "可阅读",
@@ -2144,14 +2184,44 @@
"com.affine.integration.calendar.unsubscribe": "取消订阅",
"com.affine.integration.calendar.new-title": "添加日历订阅的链接",
"com.affine.integration.calendar.new-url-label": "日历订阅链接",
"com.affine.integration.calendar.save-error": "保存日历设置时出错",
"com.affine.integration.calendar.all-day": "全天",
"com.affine.integration.calendar.account.load-error": "加载日历账户失败",
"com.affine.integration.calendar.provider.load-error": "加载日历提供商失败",
"com.affine.integration.calendar.auth.start-error": "启动日历授权失败",
"com.affine.integration.calendar.account.unlink-error": "取消关联日历账户失败",
"com.affine.integration.calendar.account.unlink": "取消关联",
"com.affine.integration.calendar.account.link": "关联",
"com.affine.integration.calendar.account.linked-empty": "尚未关联日历账户。",
"com.affine.integration.calendar.account.status.failed": "授权失败:{{error}}",
"com.affine.integration.calendar.account.status.failed-reconnect": "授权失败。请重新关联你的账户。",
"com.affine.integration.calendar.account.count": "{{count}} 个日历",
"com.affine.integration.calendar.caldav.link.title": "关联 CalDAV 账户",
"com.affine.integration.calendar.caldav.link.failed": "关联 CalDAV 账户失败",
"com.affine.integration.calendar.caldav.field.provider": "提供商",
"com.affine.integration.calendar.caldav.field.provider.placeholder": "选择提供商",
"com.affine.integration.calendar.caldav.field.provider.error": "请选择提供商。",
"com.affine.integration.calendar.caldav.field.username": "用户名",
"com.affine.integration.calendar.caldav.field.username.placeholder": "email@example.com",
"com.affine.integration.calendar.caldav.field.username.error": "用户名为必填项。",
"com.affine.integration.calendar.caldav.field.password": "密码",
"com.affine.integration.calendar.caldav.field.password.placeholder": "密码或应用专用密码",
"com.affine.integration.calendar.caldav.field.password.error": "密码为必填项。",
"com.affine.integration.calendar.caldav.field.displayName": "显示名称(可选)",
"com.affine.integration.calendar.caldav.field.displayName.placeholder": "我的 CalDAV",
"com.affine.integration.calendar.caldav.hint.app-password": "需要应用专用密码。",
"com.affine.integration.calendar.caldav.hint.learn-more": "了解更多",
"com.affine.integration.calendar.caldav.hint.guide": "提供商设置指南",
"com.affine.integration.calendar.new-doc": "新建文档",
"com.affine.integration.calendar.show-events": "显示日历事件",
"com.affine.integration.calendar.show-events-desc": "启用此设置后,您可以将日历事件关联到 AFFiNE 的 Journal 中",
"com.affine.integration.calendar.show-all-day-events": "显示全天事件",
"com.affine.integration.calendar.unsubscribe-content": "您确定要取消订阅“{{name}}”吗?取消订阅此帐户将从 Journal 中删除其数据。",
"com.affine.integration.calendar.no-journal": "未找到 {{date}} 的日记页面。请先创建日记页面。",
"com.affine.integration.calendar.no-calendar": "尚未订阅日历。",
"com.affine.integration.mcp-server.name": "MCP服务器",
"com.affine.integration.mcp-server.desc": "允许其他 MCP 客户端搜索和 AFFiNE 的文档。",
"com.affine.integration.mcp-server.copy-json.disabled-hint": "MCP token 仅显示一次。请删除并重新创建,以复制 JSON 配置。",
"com.affine.audio.notes": "笔记",
"com.affine.audio.transcribing": "转录",
"com.affine.audio.transcribe.non-owner.confirm.title": "无法检索他人的 AI 结果",
@@ -2193,12 +2263,15 @@
"error.INTERNAL_SERVER_ERROR": "发生内部错误。",
"error.NETWORK_ERROR": "网络错误。",
"error.TOO_MANY_REQUEST": "请求过多。",
"error.SSRF_BLOCKED_ERROR": "无效的 URL",
"error.RESPONSE_TOO_LARGE_ERROR": "响应过大({{receivedBytes}} 字节),限制为 {{limitBytes}} 字节",
"error.NOT_FOUND": "未找到资源。",
"error.BAD_REQUEST": "错误请求。",
"error.GRAPHQL_BAD_REQUEST": "GraphQL 请求错误,代码:{{code}}{{message}}",
"error.HTTP_REQUEST_ERROR": "HTTP请求错误,信息:{{message}}",
"error.EMAIL_SERVICE_NOT_CONFIGURED": "邮箱服务还未配置。",
"error.QUERY_TOO_LONG": "查询太长,最大长度为{{max}}。",
"error.IMAGE_FORMAT_NOT_SUPPORTED": "不支持的图片格式:{{format}}",
"error.VALIDATION_ERROR": "验证错误,错误:{{errors}}",
"error.USER_NOT_FOUND": "找不到用户。",
"error.USER_AVATAR_NOT_FOUND": "用户头像未找到。",
@@ -2242,6 +2315,7 @@
"error.INVALID_HISTORY_TIMESTAMP": "提供的文档历史时间戳无效。",
"error.DOC_HISTORY_NOT_FOUND": "在空间 {{spaceId}} 的 {{timestamp}} 时间的文档 {{docId}} 历史记录。",
"error.BLOB_NOT_FOUND": "Blob {{blobId}} 未找到在空间 {{spaceId}}。",
"error.BLOB_INVALID": "Blob 无效。",
"error.EXPECT_TO_PUBLISH_DOC": "预期发布文档,而不是空间。",
"error.EXPECT_TO_REVOKE_PUBLIC_DOC": "预期撤销公共文档,而不是空间。",
"error.EXPECT_TO_GRANT_DOC_USER_ROLES": "期望在空间 {{spaceId}} 下的文档 {{docId}} 上授予角色,而不是在空间上。",
@@ -2272,6 +2346,7 @@
"error.WORKSPACE_ID_REQUIRED_FOR_TEAM_SUBSCRIPTION": "需要一个工作区来办理团队订阅。",
"error.WORKSPACE_ID_REQUIRED_TO_UPDATE_TEAM_SUBSCRIPTION": "更新团队订阅需要工作区ID。",
"error.MANAGED_BY_APP_STORE_OR_PLAY": "此订阅由 App Store 或 Google Play 管理。请在相应的商店中进行管理。",
"error.CALENDAR_PROVIDER_REQUEST_ERROR": "日历提供商请求错误,状态:{{status}},消息:{{message}}",
"error.COPILOT_SESSION_NOT_FOUND": "找不到Copilot会话。",
"error.COPILOT_SESSION_INVALID_INPUT": "Copilot 会话输入无效。",
"error.COPILOT_SESSION_DELETED": "Copilot 会话已被删除。",