diff --git a/web/src/lib/languages.ts b/web/src/lib/languages.ts index 91e92ed..15124c3 100644 --- a/web/src/lib/languages.ts +++ b/web/src/lib/languages.ts @@ -44,6 +44,7 @@ export const UI_LANGUAGES: readonly UiLanguage[] = [ { tag: "pt-BR", name: "Português (Brasil)", beta: true }, { tag: "ru", name: "Русский", beta: true }, { tag: "uk", name: "Українська", beta: true }, + { tag: "zh-Hans", name: "简体中文", beta: true }, ]; /** Where to report a bad translation. Beta languages depend on it. */ diff --git a/web/src/locales/zh-Hans.ts b/web/src/locales/zh-Hans.ts new file mode 100644 index 0000000..3f70d98 --- /dev/null +++ b/web/src/locales/zh-Hans.ts @@ -0,0 +1,869 @@ +import type { Catalog } from "@/lib/i18n"; + +/** + * Chinese (Simplified) — generated by AI, and not reviewed by a native speaker. + * + * Marked Beta, with the report link doing the job a native speaker would. A + * missing string renders its English source, so deleting a bad entry is a + * valid fix. + * + * ── Decisions this file is consistent about ────────────────────────────── + * + * This is Simplified Chinese, and the tag says so. It is not a stand-in for + * Traditional: the script differs, and so does a good deal of the software + * vocabulary — 软件 against 軟體, 文件 against 檔案, 网络 against 網路. A + * zh-Hant catalogue would be a separate file, not a conversion of this one, + * because converting the characters without changing the words produces text + * that is readable and obviously foreign. + * + * Plurals: there are none. `Intl.PluralRules("zh-Hans")` returns `other` for + * every number, so each counted string carries a single form. That is not a + * gap in the catalogue — it is the language, and the machinery handles it by + * asking rather than assuming. Measure characters, not words: Chinese has no + * spaces, so a string that fits in English can be wider or much narrower here. + * + * Register: **您** where the reader is addressed directly. Chinese interfaces + * usually drop the pronoun entirely and most of this file does, which sidesteps + * the choice; 您 rather than 你 in the sentences that cannot, matching the + * formal address every other catalogue took. + * + * Terminology, fixed once so it cannot drift: + * + * Inbox 收件箱 Archive (verb) 归档 + * Drafts 草稿 Delete 删除 + * Sent 已发送 Move to 移动到 + * Deleted Items 已删除邮件 Reply 回复 + * Junk / Spam 垃圾邮件 Reply all 全部回复 + * Folder 文件夹 Forward 转发 + * Label 标签 Star 标星 + * Conversation 会话 Read / unread 已读 / 未读 + * Message 邮件 Settings 设置 + * Attachment 附件 Signature 签名 + * Contact 联系人 Identity 发件身份 + * + * Product names are never translated: ihasmail, Stalwart, JMAP, Sieve, vCard. + */ +export const catalog: Catalog = { + strings: { + // ── Actions ──────────────────────────────────────────────────────── + "Archive": "归档", + "Archive (e)": "归档 (e)", + "Delete": "删除", + "Delete (#)": "删除 (#)", + "Reply": "回复", + "Reply (r)": "回复 (r)", + "Reply all": "全部回复", + "Forward": "转发", + "Move to…": "移动到…", + "Move to (v)": "移动到 (v)", + "Move to folder": "移动到文件夹", + "Move here": "移动到这里", + "Mark as read": "标为已读", + "Mark as read (Shift+I)": "标为已读 (Shift+I)", + "Mark as unread": "标为未读", + "Mark as unread (Shift+U)": "标为未读 (Shift+U)", + "Mark all as read": "全部标为已读", + "Mark all as read, incl. subfolders": "全部标为已读,含子文件夹", + "Star": "标星", + "Labels": "标签", + "Labels (l)": "标签 (l)", + "Label as": "添加标签", + "Label…": "标签…", + "Compose": "写邮件", + "Compose message": "写新邮件", + "Send": "发送", + "Send at": "发送时间", + "Cancel send": "取消发送", + "Schedule send": "定时发送", + "Save": "保存", + "Save & activate": "保存并启用", + "Save & close (Esc)": "保存并关闭 (Esc)", + "Save as template": "另存为模板", + "Save draft now": "立即保存草稿", + "Cancel": "取消", + "Close": "关闭", + "Done": "完成", + "Continue": "继续", + "Edit": "编辑", + "Edit…": "编辑…", + "Rename": "重命名", + "Remove": "移除", + "Restore": "恢复", + "Retry": "重试", + "Reload": "重新加载", + "Refresh": "刷新", + "Copy": "复制", + "Copy email address": "复制邮箱地址", + "Download": "下载", + "Download all": "全部下载", + "Download (.eml)": "下载 (.eml)", + "Download latest as .eml": "将最新一封下载为 .eml", + "Upload": "上传", + "Upload files…": "上传文件…", + "Print": "打印", + "Print conversation": "打印会话", + "Undo (Ctrl+Z)": "撤销 (Ctrl+Z)", + "Redo": "重做", + "Dismiss": "关闭", + "Discard changes": "放弃更改", + "Discard draft": "放弃草稿", + "Duplicate": "创建副本", + "Validate": "检查", + "Revoke": "吊销", + "Turn off": "关闭", + "Clear": "清空", + "Clear selection": "取消选择", + "Clear custom colour": "清除自定义颜色", + "Select": "选择", + "Select all": "全选", + "Unsubscribe": "退订", + "Share…": "共享…", + "Stop sharing": "停止共享", + "Open": "打开", + "Open in new tab": "在新标签页中打开", + "Open in calendar": "在日历中打开", + "Back": "返回", + "Back (u)": "返回 (u)", + "Back to list": "返回列表", + "Back to my files": "返回我的文件", + "Go back to the list": "返回列表", + "Next": "下一个", + "Previous": "上一个", + "More": "更多", + "More actions": "更多操作", + "More options": "更多选项", + "Move up": "上移", + "Move down": "下移", + "Drag to reorder": "拖动以调整顺序", + "Right-click for options": "右键查看选项", + + // ── Mail ─────────────────────────────────────────────────────────── + "Mail": "邮件", + "Message": "邮件", + "Messages": "邮件", + "Message body": "邮件正文", + "Message headers": "邮件头", + "Message size": "邮件大小", + "Message-ID": "Message-ID", + "Original message": "原始邮件", + "Delete this message": "删除这封邮件", + "New message to this address": "写邮件到该地址", + "Conversation view": "会话视图", + "Draft": "草稿", + "Unread": "未读", + "Unread only": "仅未读", + "All mail": "全部邮件", + "Sender": "发件人", + "Sender domain": "发件人域名", + "Recipients": "收件人", + "From": "发件人", + "To": "收件人", + "Cc": "抄送", + "Bcc": "密送", + "Subject": "主题", + "Subject (optional)": "主题(可选)", + "Body": "正文", + "Body text": "正文文本", + "Attach files": "添加附件", + "Attach from Files": "从「文件」添加附件", + "Remove attachment": "移除附件", + "Has attachment": "含附件", + "Has the words": "包含字词", + "Header name": "邮件头名称", + "Show headers": "显示邮件头", + "Show original": "显示原始邮件", + "Show details": "显示详情", + "Show images": "显示图片", + "Remote images": "外部图片", + "Remote images are blocked to protect your privacy.": "为保护您的隐私,外部图片已被拦截。", + "Always from {email}": "始终显示来自 {email} 的图片", + "This looks like a mailing list.": "这看起来是一封邮件列表邮件。", + "This folder is empty": "此文件夹为空", + "This folder is empty.": "此文件夹为空。", + "Delete all spam now": "立即删除全部垃圾邮件", + "Deleting spam is permanent — it does not go to Deleted Items first.": "删除垃圾邮件不可恢复,不会先移入已删除邮件。", + "Keep in Inbox": "保留在收件箱", + "Newer (k)": "较新 (k)", + "Older (j)": "较旧 (j)", + "Open the next (older) conversation": "打开下一个(较旧的)会话", + "Open the previous (newer) conversation": "打开上一个(较新的)会话", + "Loading conversation…": "正在加载会话…", + "Important": "重要", + "Unverified": "未验证", + "Priority": "优先级", + "High": "高", + "Normal": "普通", + "Low": "低", + "to {recipients}": "收件人:{recipients}", + "From: {sender}": "发件人:{sender}", + "Waiting on the server — goes out {when}.": "正在服务器上等待,将于 {when} 发出。", + "Scheduled — click to clear the schedule": "已定时,点击可取消定时", + "Nothing scheduled": "没有定时邮件", + "The message waits on the server, so it goes out whether or not ihasmail is open.": "邮件在服务器上等待,无论 ihasmail 是否打开都会发出。", + "This server holds a message for up to {span}.": "此服务器最多可将邮件保留 {span}。", + "Date and time to send": "发送日期和时间", + "Undo send window": "撤销发送时限", + "Read receipt requested": "已请求已读回执", + "The sender asked for a read receipt.": "发件人请求了已读回执。", + "Request read receipt": "请求已读回执", + "Always request read receipts": "始终请求已读回执", + "Receipt": "回执", + "Never send one": "从不发送", + "Not this time": "这次不发送", + "It would go to {address}, which is not where the message came from.": "回执会发往 {address},而邮件并非来自该地址。", + "Use “Show original” for the complete raw message.": "使用「显示原始邮件」查看完整原文。", + + // ── Folders, calendar, contacts, files ───────────────────────────── + "Folder": "文件夹", + "Folders": "文件夹", + "Folder options": "文件夹选项", + "New folder": "新建文件夹", + "New subfolder": "新建子文件夹", + "Delete folder": "删除文件夹", + "No matching folders": "没有匹配的文件夹", + "No subfolders here.": "这里没有子文件夹。", + "Type a folder name…": "输入文件夹名称…", + "+ New folder…": "+ 新建文件夹…", + "Create, rename and hide folders.": "创建、重命名和隐藏文件夹。", + "Show unsubscribed (hidden) folders": "显示未订阅(隐藏)的文件夹", + "Storage: {used} of {total} used.": "存储空间:已用 {used},共 {total}。", + "{used} of {total}": "{used} / {total}", + + "Calendar": "日历", + "My calendars": "我的日历", + "New calendar": "新建日历", + "Calendar options": "日历选项", + "Calendar & contacts": "日历与联系人", + "Calendar is not available": "日历不可用", + "Event": "日程", + "New event": "新建日程", + "(new event)": "(新建日程)", + "New all-day event": "新建全天日程", + "Add title": "添加标题", + "Add location": "添加地点", + "Add to calendar": "添加到日历", + "Add to my calendar": "添加到我的日历", + "Remove from calendar": "从日历中移除", + "Remove from my calendar": "从我的日历中移除", + "All day": "全天", + "all-day": "全天", + "Starts": "开始", + "Starts (optional)": "开始(可选)", + "Ends": "结束", + "Ends (optional)": "结束(可选)", + "Day": "日", + "Week": "周", + "Month": "月", + "Agenda": "日程列表", + "Today": "今天", + "Go to day": "转到某天", + "Go to week": "转到某周", + "Previous month": "上个月", + "Next month": "下个月", + "Does not repeat": "不重复", + "Daily": "每天", + "Every weekday": "每个工作日", + "Yearly": "每年", + "Custom…": "自定义…", + "Weekly on {weekday}": "每周{weekday}", + "Monthly on day {day}": "每月 {day} 日", + "Repeat every": "重复间隔", + "Repeat until": "重复至", + "after N times": "重复 N 次后", + "on date": "到指定日期", + "never": "永不", + "day(s)": "天", + "week(s)": "周", + "month(s)": "个月", + "year(s)": "年", + "Reminders": "提醒", + "Add reminder": "添加提醒", + "Remove reminder": "移除提醒", + "Default reminder": "默认提醒", + "At time of event": "日程开始时", + "5 minutes before": "提前 5 分钟", + "10 minutes before": "提前 10 分钟", + "15 minutes before": "提前 15 分钟", + "30 minutes before": "提前 30 分钟", + "1 hour before": "提前 1 小时", + "1 day before": "提前 1 天", + "15 minutes": "15 分钟", + "30 minutes": "30 分钟", + "45 minutes": "45 分钟", + "1 hour": "1 小时", + "1.5 hours": "1.5 小时", + "2 hours": "2 小时", + "Default event length": "默认日程时长", + "Default view": "默认视图", + "Guests": "参与者", + "Add guests by name or email": "按姓名或邮箱添加参与者", + "Send invitation emails to guests": "向参与者发送邀请邮件", + "Going?": "是否参加?", + "Yes": "参加", + "No": "不参加", + "Maybe": "待定", + "Confirmed": "已确认", + "Tentative": "待定", + "Cancelled": "已取消", + "organizer": "组织者", + "Organizer: {name}": "组织者:{name}", + "Free": "空闲", + "Busy": "忙碌", + "Free/busy": "忙闲状态", + "Show as": "显示为", + "Availability on {date}": "{date} 的忙闲状态", + "Count all events as busy": "所有日程都计为忙碌", + "Only events I'm attending": "仅我参加的日程", + "Don't include in availability": "不计入忙闲状态", + "Meeting link": "会议链接", + "No events in the next 60 days.": "未来 60 天内没有日程。", + "Working hours": "工作时间", + "Working hours start": "工作时间开始", + "Working hours end": "工作时间结束", + "Colour categories": "颜色分类", + "Category": "分类", + "No category": "无分类", + "New category": "新建分类", + "Delete category": "删除分类", + "Manage categories…": "管理分类…", + "Use category color": "使用分类颜色", + "Use calendar color": "使用日历颜色", + "Use the default colour": "使用默认颜色", + "+{n} more": "还有 {n} 项", + + "Contacts": "联系人", + "Contacts are not available": "联系人不可用", + "New contact": "新建联系人", + "Edit contact": "编辑联系人", + "Select a contact": "选择联系人", + "All contacts": "全部联系人", + "Search contacts": "搜索联系人", + "Search contacts to add…": "搜索要添加的联系人…", + "Loading contacts…": "正在加载联系人…", + "Add to contacts": "添加到联系人", + "Add to my contacts": "添加到我的联系人", + "Remove from my contacts": "从我的联系人中移除", + "Address book": "通讯录", + "Address books": "通讯录", + "All address books": "全部通讯录", + "My address books": "我的通讯录", + "New address book": "新建通讯录", + "No address books yet.": "还没有通讯录。", + "Choose from address books": "从通讯录中选择", + "Import vCard": "导入 vCard", + "Export all": "全部导出", + "Export book": "导出通讯录", + "Email group": "给该群组写邮件", + "Email everyone": "给所有人写邮件", + "Members": "成员", + "Members ({count})": "成员({count})", + "Group": "群组", + "· group": "· 群组", + "Person": "个人", + "First name": "名", + "Last name": "姓", + "Middle name": "中间名", + "More name fields": "更多姓名字段", + "Nickname": "昵称", + "Prefix": "称谓", + "Suffix": "后缀", + "Dr.": "博士", + "Jr.": "小", + "Display name": "显示名称", + "Job title": "职位", + "Organization": "组织", + "Company": "公司", + "Birthday": "生日", + "Notes": "备注", + "Website": "网站", + "Phone": "电话", + "Add phone": "添加电话", + "Add email": "添加邮箱", + "Add address": "添加地址", + "Address": "地址", + "Street": "街道", + "City": "城市", + "State / Region": "省 / 地区", + "Postal code": "邮政编码", + "Country": "国家/地区", + "Change photo": "更换照片", + "Remove photo": "移除照片", + "Updated {date}": "更新于 {date}", + "Modified": "修改时间", + "Search names and addresses": "搜索姓名和地址", + "Add a person or group…": "添加个人或群组…", + "Choose recipients": "选择收件人", + "Available to add": "可添加", + "vCard": "vCard", + "vCard attachment": "vCard 附件", + + "Files": "文件", + "My files": "我的文件", + "File storage is not available": "文件存储不可用", + "Drag files here or use Upload.": "将文件拖到此处,或点击「上传」。", + "Shared": "已共享", + "Shared with me": "与我共享", + "Nothing is shared with you.": "没有人与您共享内容。", + "Not shared with anyone yet.": "尚未与任何人共享。", + "Check for new shares": "检查新的共享", + "Shared files are copied to your account when attached.": "添加为附件时,共享文件会复制到您的账户。", + "Viewer": "查看", + "Editor": "编辑", + "Size": "大小", + "Add files": "添加文件", + "Minimize": "最小化", + + // ── Settings ─────────────────────────────────────────────────────── + "Settings": "设置", + "All settings": "全部设置", + "Sections": "分区", + "General": "常规", + "Appearance": "外观", + "Make ihasmail yours.": "把 ihasmail 调成您喜欢的样子。", + "Reading": "阅读", + "Reading pane": "阅读窗格", + "Reading, sending and list behaviour. Settings are stored in this browser.": "阅读、发送和列表行为。设置保存在此浏览器中。", + "Right of the list": "列表右侧", + "Below the list": "列表下方", + "Hidden (open full width)": "隐藏(全宽打开)", + "Off (open messages full width)": "关闭(邮件全宽打开)", + "Off": "关闭", + "Composing": "写邮件", + "Default format": "默认格式", + "Rich text (HTML)": "富文本 (HTML)", + "Plain text": "纯文本", + "Quote original message in replies": "回复时引用原邮件", + "Place signature above quoted text": "将签名放在引用文本上方", + "Attachment reminder": "附件提醒", + "Warn when the message mentions an attachment but none is attached.": "邮件提到附件但未添加时提醒。", + "Spell check while typing": "输入时检查拼写", + "Confirm before deleting": "删除前确认", + "Show message snippets": "显示邮件摘要", + "Preview the first line of each message in the list.": "在列表中显示每封邮件的首行。", + "Show sender avatars": "显示发件人头像", + "Group messages from the same thread together.": "将同一会话的邮件归为一组。", + "After archiving or deleting": "归档或删除后", + "Ask before showing (recommended)": "显示前询问(推荐)", + "Always (all messages)": "始终显示(全部邮件)", + "Show automatically from my contacts": "联系人的邮件自动显示", + "Immediately when opened": "打开时立即标记", + "After 2 seconds": "2 秒后", + "After 5 seconds": "5 秒后", + "Never automatically": "从不自动标记", + "When someone requests a read receipt": "当有人请求已读回执时", + "Ask me on each message": "每封邮件都询问我", + "5 seconds": "5 秒", + "8 seconds": "8 秒", + "15 seconds": "15 秒", + "30 seconds": "30 秒", + "Locale": "区域", + "Language": "语言", + "Interface language": "界面语言", + "Language & region": "语言和地区", + "Date format": "日期格式", + "Time format": "时间格式", + "Time zone": "时区", + "Week starts on": "每周开始于", + "Monday": "星期一", + "Tuesday": "星期二", + "Wednesday": "星期三", + "Thursday": "星期四", + "Friday": "星期五", + "Saturday": "星期六", + "Sunday": "星期日", + "12-hour clock (6:23 PM)": "12 小时制 (6:23 PM)", + "24-hour clock (18:23)": "24 小时制 (18:23)", + "Browser default ({zone})": "浏览器默认({zone})", + "Default ({zone})": "默认({zone})", + "Automatic ({example})": "自动({example})", + "Automatic ({locale})": "自动({locale})", + "Automatic": "自动", + "Preview: {example}": "预览:{example}", + "Dates, times and month names follow this choice.": "日期、时间和月份名称将采用此设置。", + "Your mail server reports {name} ({tag}).": "您的邮件服务器报告为 {name}({tag})。", + "Your mail server does not report a locale, so the browser's is used.": "您的邮件服务器未报告语言,因此使用浏览器的设置。", + "Dates": "日期", + "Date": "日期", + "Time": "时间", + "When": "条件", + "Then": "则", + "then": "则", + "Theme": "主题", + "Accent color": "强调色", + "Color": "颜色", + "Colour": "颜色", + "Text color": "文字颜色", + "Density & text": "密度与文字", + "Display density": "显示密度", + "Comfortable": "宽松", + "Cozy (default)": "适中(默认)", + "Compact": "紧凑", + "Text size": "文字大小", + "Font size": "字号", + "Small": "小", + "Medium": "中", + "Large": "大", + "Huge": "特大", + "Sidebar": "侧边栏", + "Show labels in the sidebar": "在侧边栏中显示标签", + "Collapse sidebar to icons": "将侧边栏收起为图标", + "Apply the theme to messages too": "邮件也应用主题", + "Swiping": "滑动手势", + "Swipe left": "向左滑动", + "Swipe right": "向右滑动", + "Backup": "备份", + "Export settings": "导出设置", + "Import settings": "导入设置", + "Settings imported": "设置已导入", + "Invalid settings file": "设置文件无效", + "Reset to defaults": "恢复默认设置", + "Default mail app": "默认邮件应用", + "Documentation": "文档", + "About ihasmail": "关于 ihasmail", + "About": "关于", + "Server": "服务器", + "Server capabilities": "服务器功能", + "Accounts": "账户", + "Account": "账户", + "Max upload": "最大上传", + "{size} MB": "{size} MB", + "KB": "KB", + "Image privacy proxy": "图片隐私代理", + "enabled": "已启用", + "disabled": "已停用", + "Enabled": "已启用", + "active": "使用中", + "hidden": "已隐藏", + "connected": "已连接", + "reconnecting…": "正在重新连接…", + "AGPL-3.0 source": "AGPL-3.0 源代码", + + // ── Identities, templates, filters ───────────────────────────────── + "Identities & signatures": "发件身份与签名", + "Add identity": "添加发件身份", + "Delete identity": "删除发件身份", + "Make default": "设为默认", + "Default": "默认", + "Show when composing": "写邮件时显示", + "Hide when composing": "写邮件时隐藏", + "Signature": "签名", + "Your signature…": "您的签名…", + "Reply-To": "回复地址", + "Reply-To (optional)": "回复地址(可选)", + "Reply-To: {addresses}": "回复地址:{addresses}", + "Replies go to…": "回复将发往…", + "Set a Reply-To address": "设置回复地址", + "{email} is now your default identity": "{email} 现在是您的默认发件身份", + "Templates": "模板", + "New template": "新建模板", + "Delete template": "删除模板", + "Insert template": "插入模板", + "Template text…": "模板内容…", + "Subject: {subject}": "主题:{subject}", + "Filters & rules": "过滤器与规则", + "Filters unavailable": "过滤器不可用", + "Rules": "规则", + "Rule name": "规则名称", + "New rule": "新建规则", + "Delete rule": "删除规则", + "No filters yet": "还没有过滤器", + "Add condition": "添加条件", + "Remove condition": "移除条件", + "Add action": "添加操作", + "Remove action": "移除操作", + "all of the following match": "满足以下全部条件", + "any of the following match": "满足以下任一条件", + "contains": "包含", + "does not contain": "不包含", + "is": "等于", + "is not": "不等于", + "matches (wildcards * ?)": "匹配(通配符 * ?)", + "does not match": "不匹配", + "matches regex": "匹配正则表达式", + "does not match regex": "不匹配正则表达式", + "exists": "存在", + "does not exist": "不存在", + "is larger than": "大于", + "is smaller than": "小于", + "Stop processing more rules": "停止处理后续规则", + "keep copy": "保留副本", + "Forward to": "转发到", + "Reject with message": "拒收并回复消息", + "Scripts": "脚本", + "Scripts (advanced)": "脚本(高级)", + "Script name": "脚本名称", + "New script": "新建脚本", + "Delete script": "删除脚本", + "Sieve source": "Sieve 源码", + "Preview generated Sieve script": "预览生成的 Sieve 脚本", + "Start with rules": "改用规则", + "Switch to rules?": "切换到规则?", + "Create filter": "创建过滤器", + "Filter messages like this": "过滤类似邮件", + "Filter messages like this…": "过滤类似邮件…", + "Also apply to existing messages in": "同时应用于以下位置的现有邮件", + "keyword (e.g. $important, work)": "关键词(例如 $important、work)", + "Other header…": "其他邮件头…", + "Out of office": "外出自动回复", + "Auto-reply enabled": "自动回复已启用", + + // ── Security, sessions, sign-in ──────────────────────────────────── + "Security & sessions": "安全与会话", + "Password": "密码", + "Your password": "您的密码", + "Current password": "当前密码", + "New password": "新密码", + "Confirm new password": "确认新密码", + "Current code": "当前验证码", + "Code from your authenticator": "身份验证器中的验证码", + "Two-factor authentication": "两步验证", + "Turn off two-factor authentication": "关闭两步验证", + "Your password alone will be enough to sign in again.": "之后仅凭密码即可重新登录。", + "App passwords": "应用专用密码", + "New app password for": "新建应用专用密码,用于", + "Your new app password": "您的新应用专用密码", + "Secret": "密钥", + "Thunderbird on my laptop": "笔记本上的 Thunderbird", + "Active webmail sessions": "活跃的网页邮箱会话", + "Sign out": "退出登录", + "Sign out here": "在此退出登录", + "Sign out all other sessions": "退出所有其他会话", + "Signed in as": "已登录为", + "This is my own device": "这是我自己的设备", + "this device": "当前设备", + "Device": "设备", + "IP": "IP", + "Last active": "最后活动", + "Created": "创建时间", + "Expires": "过期时间", + "Status": "状态", + "Online": "在线", + "Reason": "原因", + "Type": "类型", + "Email or username": "邮箱或用户名", + "Use your usual address as the username.": "用户名请使用您平时的邮箱地址。", + "Fast, friendly webmail. Your mailbox, your way.": "快速、友好的网页邮箱。您的邮箱,随您安排。", + + // ── Notifications ────────────────────────────────────────────────── + "Notifications": "通知", + "Notifications are blocked in your browser settings.": "浏览器设置中已阻止通知。", + "Not supported in this browser.": "此浏览器不支持。", + "Desktop notifications while ihasmail is open": "打开 ihasmail 时显示桌面通知", + "Notify me even when ihasmail is closed": "关闭 ihasmail 后也通知我", + "Play a sound for new mail": "新邮件提示音", + "Test notification": "测试通知", + "Background notifications are on": "后台通知已开启", + "The tab title and favicon always show your unread Inbox count.": "标签页标题和图标始终显示收件箱的未读数量。", + "Live updates are delivered via JMAP push ({state}).": "实时更新通过 JMAP 推送送达({state})。", + "Shows a system notification when new mail arrives in your Inbox while the tab is in the background.": "当标签页在后台且收件箱收到新邮件时,显示系统通知。", + + // ── Editor ───────────────────────────────────────────────────────── + "Formatting": "格式", + "Formatting options": "格式选项", + "Remove formatting": "清除格式", + "Bold (Ctrl+B)": "加粗 (Ctrl+B)", + "Italic (Ctrl+I)": "斜体 (Ctrl+I)", + "Underline (Ctrl+U)": "下划线 (Ctrl+U)", + "Strikethrough": "删除线", + "Highlight": "突出显示", + "Bulleted list": "项目符号列表", + "Numbered list": "编号列表", + "Increase indent": "增加缩进", + "Decrease indent": "减少缩进", + "Align left": "左对齐", + "Align right": "右对齐", + "Center": "居中", + "Quote": "引用", + "Code block": "代码块", + "Normal text": "正文", + "Insert link (Ctrl+K)": "插入链接 (Ctrl+K)", + "Insert image": "插入图片", + "Link": "链接", + "List": "列表", + "Emoji": "表情符号", + "Write your message…": "写下您的邮件…", + + // ── Search, shortcuts, generic labels ────────────────────────────── + "Search": "搜索", + "Search mail": "搜索邮件", + "Advanced search": "高级搜索", + "Keyboard shortcuts": "键盘快捷键", + "Keyboard shortcuts (?)": "键盘快捷键 (?)", + "Shortcuts": "快捷键", + "Go to": "转到", + "Menu": "菜单", + "Options": "选项", + "Send options": "发送选项", + "Name": "名称", + "Email": "邮箱", + "Email address": "邮箱地址", + "Description": "说明", + "Location": "地点", + "Visibility": "可见性", + "Private": "私密", + "Work": "工作", + "Loading…": "正在加载…", + "None": "无", + "optional": "可选", + "Always show": "始终显示", + "to": "收件人", + "Received": "接收时间", + "In-Reply-To": "In-Reply-To", + "References": "References", + + // ── Labels ───────────────────────────────────────────────────────── + "Add label / keyword": "添加标签 / 关键词", + "Manage labels": "管理标签", + "Create “{name}”": "创建「{name}」", + "Type a name to create your first label.": "输入名称以创建您的第一个标签。", + "Labels are IMAP keywords stored on your messages, so they sync to other clients. Names and colours are kept in this browser.": "标签是保存在邮件上的 IMAP 关键词,因此会同步到其他客户端。名称和颜色则保存在此浏览器中。", + "New label": "新建标签", + "Delete label": "删除标签", + + // ── Attachments, dates, search prose ─────────────────────────────── + "PDF": "PDF", + "Large attachments may be rejected by some servers": "部分服务器可能拒收过大的附件", + "Images are stored in your Files (folder “ihasmail”) and embedded when you send.": "图片保存在您的「文件」中(文件夹「ihasmail」),并在发送时嵌入邮件。", + "After": "晚于", + "Before": "早于", + "Choose a date": "选择日期", + "Choose a date and time": "选择日期和时间", + "Pick date and time…": "选择日期和时间…", + "Search mail (from:, to:, subject:, has:attachment, is:unread, in:, before:, after:)": "搜索邮件 (from:, to:, subject:, has:attachment, is:unread, in:, before:, after:)", + "Settings → Filters & rules": "设置 → 过滤器与规则", + "Open the Mail view to see all shortcuts.": "打开邮件视图以查看全部快捷键。", + "Gmail-style shortcuts are always on. Press {key} anywhere to see this list.": "Gmail 风格的快捷键始终启用。在任意位置按 {key} 即可查看此列表。", + "Select a conversation to read it here · Press {key} for shortcuts": "选择一个会话即可在此阅读 · 按 {key} 查看快捷键", + "Tip: press {key} on a conversation to apply labels. Search with {operator}.": "提示:在会话上按 {key} 可添加标签。使用 {operator} 搜索。", + "A fast, friendly, open-source webmail for {server}, built on JMAP.": "一款面向 {server} 的快速、友好的开源网页邮箱,基于 JMAP 构建。", + + // ── Filters, vacation, capability notices ────────────────────────── + "Thanks for your message. I'm away until … and will reply when I'm back.": "感谢您的来信。我将外出至……,回来后会尽快回复。", + "Automatically reply to people who email you while you're away. Each sender gets at most one reply.": "在您外出期间自动回复来信的人。每位发件人最多收到一封回复。", + "Sort incoming mail automatically. Rules run on the server (Sieve), so they work for every client you use.": "自动整理收到的邮件。规则在服务器上运行(Sieve),因此对您使用的每个客户端都有效。", + "Canned responses you can insert into any message from the composer's template button.": "预设的回复内容,可在写邮件时通过模板按钮插入任意邮件。", + "Create a rule to move newsletters to a folder, flag important senders, or forward mail.": "创建规则,把订阅邮件移入文件夹、标记重要发件人或转发邮件。", + "Advanced: manage raw Sieve scripts. Only one script can be active at a time.": "高级:管理原始 Sieve 脚本。同一时间只能启用一个脚本。", + "Only part of your filter script arrived.": "您的过滤脚本只收到了一部分。", + "Your active script “{name}” was written by hand.": "您启用的脚本「{name}」是手动编写的。", + "Another script (“{name}”) is active. Saving rules here will activate the “ihasmail” script instead.": "另一个脚本(「{name}」)正在启用中。在此保存规则将改为启用「ihasmail」脚本。", + "“{name}” will be deactivated (not deleted) and a new “ihasmail” script will take over.": "「{name}」将被停用(不会删除),改由新的「ihasmail」脚本接管。", + "Sieve filtering is not available for this account.": "此账户不支持 Sieve 过滤。", + "Sieve filtering is not enabled for this account.": "此账户未启用 Sieve 过滤。", + "Vacation responses are not available for this account.": "此账户不支持外出自动回复。", + "This account does not have the JMAP calendars capability.": "此账户不具备 JMAP 日历功能。", + "This account does not have the JMAP contacts capability.": "此账户不具备 JMAP 联系人功能。", + "This account does not have the JMAP file storage capability.": "此账户不具备 JMAP 文件存储功能。", + "It {damage}, so the rules in it can't be shown or edited — saving what did arrive would write it back over the rest. Reload the page to try again. Your rules are still on the server; nothing here has changed them.": "它{damage},因此其中的规则无法显示或编辑——保存已收到的部分会覆盖掉其余内容。请重新加载页面再试一次。您的规则仍在服务器上,这里没有对它们做任何更改。", + "The visual rule editor only manages scripts it created. You can edit the script in the {tab} tab, or start fresh with rules (the existing script will be kept but deactivated).": "可视化规则编辑器只管理它自己创建的脚本。您可以在「{tab}」标签页中编辑脚本,或者改用规则重新开始(现有脚本会保留但被停用)。", + "Your filter script {damage}, so only part of it arrived. Adding a rule would write that part back over the whole thing. Reload the page and try again.": "您的过滤脚本{damage},因此只收到了一部分。添加规则会用这一部分覆盖整个脚本。请重新加载页面再试一次。", + "Your filter script couldn't be read just now, so adding a rule would risk overwriting it. Reload the page and try again.": "刚才无法读取您的过滤脚本,因此添加规则有覆盖它的风险。请重新加载页面再试一次。", + "Your active Sieve script was written by hand, so rules can't be added automatically. Open {where} to edit the script or switch to managed rules.": "您启用的 Sieve 脚本是手动编写的,因此无法自动添加规则。请打开 {where} 编辑脚本,或切换为受管理的规则。", + + // ── Settings prose ───────────────────────────────────────────────── + "tell us about it": "告诉我们", + "This translation was generated by AI and has not been checked by a native speaker, so it is marked Beta until somebody who speaks it signs it off. Anything that reads wrongly is worth reporting — {report}.": "本翻译由 AI 生成,尚未经母语者校对,因此在有人校对签核之前会一直标记为 Beta。任何读起来不对的地方都值得反馈——{report}。", + "Only languages ihasmail has been translated into appear here, so this list grows as translations land rather than ahead of them — a language offered without strings behind it would leave the page claiming to be in a language it is not.": "这里只列出 ihasmail 已经翻译过的语言,因此列表会随着译文落地而增加,而不会提前出现——提供一种背后没有译文的语言,只会让页面声称自己使用着一种它并未使用的语言。", + "This is separate from {setting} in General, which decides how dates, times and numbers are written. You can read an English interface with German dates, or the other way round.": "这与「常规」中的{setting}是两回事,后者决定日期、时间和数字的写法。您可以用英文界面配德式日期,反过来也可以。", + "Defaults for the calendar views and new events.": "日历视图和新建日程的默认设置。", + "Replies will go to this address instead of the From address": "回复将发往此地址,而不是发件人地址", + "Replies to mail sent from this identity go here instead of the From address.": "使用此发件身份发出的邮件,其回复将发往这里,而不是发件人地址。", + "New identities must use an address this account is allowed to send from (aliases configured on the server).": "新建发件身份必须使用此账户获准发信的地址(在服务器上配置的别名)。", + "Not offered when composing. It still receives mail, and you can still send from it by showing it again.": "写邮件时不再提供此身份。它仍会接收邮件,重新显示后也仍可用于发信。", + "Each identity is a sender address with its own name, Reply-To and signature. The default identity is preselected when you compose; set a Reply-To when replies should go somewhere other than the From address.": "每个发件身份都是一个发件地址,拥有各自的名称、回复地址和签名。写邮件时会预先选中默认身份;若希望回复发往发件人地址以外的地方,请设置回复地址。", + "This signature is larger than the server's {limit}-byte limit. ihasmail will keep the full version in your Files and store a short text fallback on the server — other mail clients will see the plain-text version.": "此签名超出了服务器 {limit} 字节的限制。ihasmail 会把完整版本保存在您的「文件」中,并在服务器上存放一段简短的文本备用版——其他邮件客户端看到的将是纯文本版本。", + "Outlook-style categories you can assign to events from the right-click menu or the event editor. The category name is stored on the event, so it syncs to other clients.": "Outlook 风格的分类,可通过右键菜单或日程编辑器指定给日程。分类名称保存在日程上,因此会同步到其他客户端。", + "Plain-text mail already follows the theme. With this on, HTML mail that brings no colours of its own does as well, instead of sitting on a white card. Messages that style themselves are left exactly as the sender designed them.": "纯文本邮件本就会跟随主题。开启后,未自带配色的 HTML 邮件也会跟随主题,而不再显示在白色卡片上。自带样式的邮件则完全保持发件人设计的样子。", + "On a touchscreen, drag a message sideways to act on it. Each direction can do one thing, or nothing. These follow your account, so a phone and a tablet agree; a mouse ignores them and keeps dragging messages into folders instead.": "在触摸屏上,横向拖动邮件即可对其操作。每个方向可以执行一项操作,也可以什么都不做。这些设置跟随您的账户,因此手机和平板保持一致;鼠标不受影响,仍然是把邮件拖入文件夹。", + "This screen has no touchscreen, so nothing here changes what it does. Your phone or tablet will pick these up.": "此屏幕没有触摸屏,因此这里的设置不会改变它的行为。您的手机或平板会应用这些设置。", + "Holding a message selects it, and holding a folder opens its menu. Pull the top of the message list down to check for new mail.": "长按邮件可选中它,长按文件夹可打开其菜单。下拉邮件列表顶部即可检查新邮件。", + "A receipt tells whoever asked that this address is live and when the message was read, and the sender chooses where it goes — so there is no automatic option. Bulk mail, mailing lists and anything marked auto-submitted are never offered one at all.": "回执会告诉请求方这个地址确实有人在用,以及邮件是何时被读的,而回执发往何处由发件人指定——因此这里没有自动发送的选项。群发邮件、邮件列表以及任何标记为自动提交的邮件,一律不提供发送回执的选项。", + "This browser cannot register apps for {scheme} links. Safari, in particular, has no such API — you can still make ihasmail the default from your operating system if you install it as an app.": "此浏览器无法为 {scheme} 链接注册应用。Safari 尤其没有相应的接口——如果您把 ihasmail 安装为应用,仍可在操作系统中将它设为默认。", + "Registering for {scheme} links requires a secure (HTTPS) connection.": "注册 {scheme} 链接需要安全连接(HTTPS)。", + "Open {scheme} links — in web pages, documents and other apps — in ihasmail instead of a desktop mail client. Your browser will ask you to confirm, and you can change it later in its own settings (Chrome: Settings › Privacy and security › Site settings › Protocol handlers; Firefox: Settings › General › Applications).": "让网页、文档和其他应用中的 {scheme} 链接在 ihasmail 中打开,而不是桌面邮件客户端。浏览器会请您确认,之后也可以在浏览器自身的设置中更改(Chrome:设置 › 隐私和安全 › 网站设置 › 协议处理程序;Firefox:设置 › 常规 › 应用程序)。", + "Requested in this browser. Whether it took effect is up to the browser — check its settings if mail links still open elsewhere.": "已在此浏览器中提出请求。是否生效由浏览器决定——如果邮件链接仍在别处打开,请检查浏览器的设置。", + "For a system-wide default, install ihasmail as an app first (in Chrome: the install icon in the address bar). Your operating system can then offer ihasmail directly wherever it asks which mail app to use.": "若要设为系统级默认,请先把 ihasmail 安装为应用(在 Chrome 中:地址栏里的安装图标)。之后操作系统在询问使用哪个邮件应用时,就会直接提供 ihasmail。", + "Needs a browser with the Push API and a mail server that publishes a push key.": "需要支持 Push API 的浏览器,以及发布了推送密钥的邮件服务器。", + "Your mail server delivers these straight to your browser, so they arrive with no ihasmail tab open, naming the sender and subject. Your browser still has to be running — if you quit it completely, notifications wait and arrive when you open it again.": "您的邮件服务器会把通知直接送到浏览器,因此不必打开 ihasmail 标签页也能收到,并会显示发件人和主题。但浏览器仍需保持运行——如果完全退出浏览器,通知会等到您再次打开时送达。", + "Your mail server can wake this browser, but will not include the sender or subject. Your browser still has to be running.": "您的邮件服务器可以唤醒此浏览器,但不会包含发件人或主题。浏览器仍需保持运行。", + "This is what a new-mail notification looks like.": "新邮件通知就是这个样子。", + "You're signed in as {user}. Your password is never stored in the browser; the server keeps it encrypted per-session for talking to Stalwart.": "您当前以 {user} 登录。您的密码从不保存在浏览器中;服务器会按会话加密保存,用于与 Stalwart 通信。", + "App passwords are managed by your mail administrator.": "应用专用密码由您的邮件管理员管理。", + "Changing your password signs out your other webmail sessions. Any app passwords keep working.": "更改密码会让您的其他网页邮箱会话退出登录。已有的应用专用密码仍可继续使用。", + "This account has two-factor authentication on. ihasmail can't sign you in with a code yet, so signing in on another device needs an app password — or you can turn two-factor authentication off here.": "此账户已开启两步验证。ihasmail 目前还不能通过验证码登录,因此在其他设备上登录需要使用应用专用密码——您也可以在这里关闭两步验证。", + "A separate password for a mail app or device, which you can revoke on its own. App passwords skip two-factor codes, so they keep working in apps that can't ask for one.": "为某个邮件应用或设备单独设置的密码,可以单独吊销。应用专用密码会跳过两步验证码,因此在无法输入验证码的应用中仍然可用。", + "Copy it into {name} now — it isn't shown again.": "请立即把它复制到 {name}——它不会再次显示。", + "No other users found in the directory, so nobody new can be added. Sharing already in place is listed below and can still be removed.": "目录中没有找到其他用户,因此无法添加新的共享对象。已有的共享列在下方,仍可移除。", + "Stalwart does not publish its version number to mail clients, so ihasmail reports the edition where the server gives one. ihasmail requires 0.16 or newer, and sign-in refuses anything older.": "Stalwart 不会向邮件客户端公布版本号,因此只有在服务器给出版本类型时,ihasmail 才会报告它。ihasmail 需要 0.16 或更高版本,更旧的版本一律无法登录。", + "{name} is the palette from {site}, and what a new account starts on. It is a dark theme, so it counts as dark wherever that matters, and the accent colour below still applies on top of it.": "{name} 是 {site} 的配色,也是新账户的初始主题。它属于深色主题,因此在需要区分明暗的地方都算作深色,下方的强调色仍会叠加在它之上。", + "ihasmail's own version is the date of the commit it was built from, followed by where that commit came from: {example} was built from a commit dated the 30th of August 2026 that arrived through pull request 129. A commit that did not come through one carries its short SHA instead — {sha}. The version deliberately says nothing about Stalwart; what this build needs from the server is the line above.": "ihasmail 自身的版本号是其构建所用提交的日期,后面跟着该提交的来源:{example} 表示由 2026 年 8 月 30 日的一个提交构建而成,而该提交来自第 129 号拉取请求。未经拉取请求的提交则改用简短 SHA 表示——{sha}。版本号刻意不包含任何关于 Stalwart 的信息;此版本对服务器的要求见上一行。", + + // ── Constant labels ──────────────────────────────────────────────── + "Add": "添加", + "Create subfolders": "创建子文件夹", + "Dark": "深色", + "Light": "浅色", + "Match system": "跟随系统", + "Day.Month.Year": "日.月.年", + "Day/Month/Year": "日/月/年", + "Month/Day/Year": "月/日/年", + "Year-Month-Day (ISO 8601)": "年-月-日 (ISO 8601)", + "Edit all": "编辑全部", + "Edit contents": "编辑内容", + "Edit own": "编辑自己的", + "Flag": "标记", + "Mark read": "标为已读", + "Private props": "私密属性", + "Read": "读取", + "Read events": "查看日程", + "RSVP": "回复邀请", + "See free/busy": "查看忙闲状态", + "Share": "共享", + "Write": "写入", + "Live updates connected": "实时更新已连接", + "Live updates reconnecting…": "实时更新正在重新连接…", + "Live updates off — checking periodically instead": "实时更新已关闭——改为定期检查", + "Mark as read / unread": "标为已读 / 未读", + "Star / unstar": "标星 / 取消标星", + "Report spam / not spam": "举报垃圾邮件 / 取消举报", + "Report spam": "举报垃圾邮件", + "Not spam": "不是垃圾邮件", + "Nothing": "不执行任何操作", + "No conversation selected": "未选择会话", + "Drop here for the top level": "拖放到此处可移至顶层", + "Later today": "今天晚些时候", + "Tomorrow morning": "明天上午", + "Tomorrow afternoon": "明天下午", + "Monday morning": "周一上午", + "Open draft": "打开草稿", + "Undo": "撤销", + + // ── Folder names (role folders only) ─────────────────────────────── + "Deleted Items": "已删除邮件", + "folder\u0004Inbox": "收件箱", + "folder\u0004Archive": "归档", + "folder\u0004Drafts": "草稿", + "folder\u0004Sent": "已发送", + "folder\u0004Deleted Items": "已删除邮件", + "folder\u0004Junk Mail": "垃圾邮件", + "folder\u0004Important": "重要", + "folder\u0004All mail": "全部邮件", + "folder": "文件夹", + "“{name}” moved into “{parent}”": "「{name}」已移入「{parent}」", + "“{name}” moved to the top level": "「{name}」已移至顶层", + "Could not move “{name}”: {reason}": "无法移动「{name}」:{reason}", + "Delete “{name}”?": "删除「{name}」?", + "Rename folder": "重命名文件夹", + "Search: {query}": "搜索:{query}", + }, + plurals: { + /* + * One form each, because Chinese has one. Intl.PluralRules returns `other` + * for every number, so `one`, `few` and `many` would never be selected — + * supplying them would be filling in a form the language does not have. + */ + "{n} messages": { other: "{n} 封邮件" }, + "{n} conversations": { other: "{n} 个会话" }, + "{n} selected": { other: "已选择 {n} 项" }, + }, +};