`i18n:coverage` reported 100% while a hundred-odd strings rendered
English in every language. It was not wrong about what it measured: it
reads JSX text, and none of these were JSX text. They were toast
arguments, `confirmDialog({ title, confirmLabel })` props, `title=` and
`aria-label=` attributes, and template literals — every one built from an
expression the codemod cannot read.
176 source strings and 15 plural sets now go through t() and plural(),
translated into all nine languages. Where English put a word in a slot,
the sentence is spelled out per branch instead: `Filter ${verb}` became
"Filter saved" and "Filter created", because which word agrees with what,
and where it sits, is not a property English gets to decide for everyone.
Counts that were `${n} message${n === 1 ? "" : "s"}` are plural() calls,
so Russian and Ukrainian get three forms and Japanese and Chinese get the
one they actually have.
Two of the catalogue's own conventions were worth learning the hard way.
Plural entries are keyed on the English *other* form, not `one` — `one`
is a form English happens to have and Japanese does not. And a constant
table holding English that is translated at the render site is fine: the
literal is a key, not a leak.
Which is what the new check encodes. `scripts/i18n-literals.mjs` accepts
a string that is wrapped where it is written or is a catalogue key
somewhere, and refuses one that is neither — a string no catalogue can
translate, however many languages ship. It found twenty more than my own
sweep had, including the stale-folder toast seen in production. It runs
as part of `npm run i18n:check`.
Also fixed: the catalogue is now awaited before the first paint. The
tree is rebuilt when a catalogue lands, so components recover on their
own, but a string computed in an effect does not — a toast fired in that
gap is emitted in English and stays English. The wait costs nothing
visible, since the session bootstrap already shows a spinner and English
resolves immediately.
And the Japanese agenda title loses a space Japanese does not use:
"{date} からの予定" was written with the English habit of spacing around
a placeholder.
1071 lines
63 KiB
TypeScript
1071 lines
63 KiB
TypeScript
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}",
|
||
|
||
// ── Composer status, calendar title ────────────────────────────────
|
||
"New message": "新邮件",
|
||
"Sending…": "正在发送…",
|
||
"Saving…": "正在保存…",
|
||
"Error": "错误",
|
||
"Saved {when}": "已保存 {when}",
|
||
"Unsaved": "未保存",
|
||
"Agenda from {date}": "从 {date} 起的日程",
|
||
|
||
// ── Toasts, dialogs and computed labels (second extraction pass) ───
|
||
"(no subject)": "(无主题)",
|
||
"(skipped: {actions})": "(已跳过:{actions})",
|
||
"Activate": "启用",
|
||
"Add a contact or import a vCard file.": "添加联系人,或导入 vCard 文件。",
|
||
"Added to your calendar": "已添加到您的日历",
|
||
"All events in this calendar will be deleted.": "此日历中的所有日程都将被删除。",
|
||
"All occurrences": "所有重复日程",
|
||
"An occurrence cannot be moved to another calendar on its own": "单个重复日程无法单独移动到其他日历",
|
||
"Anything signed in with this password stops working immediately.": "使用此密码登录的一切将立即停止工作。",
|
||
"App password revoked": "应用专用密码已吊销",
|
||
"Applies to every date in the series.": "对该系列的所有日期生效。",
|
||
"Applies to this date only.": "仅对此日期生效。",
|
||
"Apply to series": "应用于整个系列",
|
||
"Applying filter to existing messages…": "正在对现有邮件应用过滤器…",
|
||
"Attachments are still uploading": "附件仍在上传中",
|
||
"Calendar saved": "日历已保存",
|
||
"Categorised as {name}": "已归入分类「{name}」",
|
||
"Category cleared": "已清除分类",
|
||
"Change this event?": "要修改此日程吗?",
|
||
"Choose a calendar": "请选择日历",
|
||
"Choose an address book": "请选择通讯录",
|
||
"Colour updated": "颜色已更新",
|
||
"Contact created": "联系人已创建",
|
||
"Contact deleted": "联系人已删除",
|
||
"Contact saved": "联系人已保存",
|
||
"Copied": "已复制",
|
||
"Copy of {title}": "{title} 的副本",
|
||
"Could not cancel: {error}": "无法取消:{error}",
|
||
"Could not copy": "无法复制",
|
||
"Could not copy the address": "无法复制该地址",
|
||
"Could not empty folder: {error}": "无法清空文件夹:{error}",
|
||
"Could not load source: {error}": "无法加载原文:{error}",
|
||
"Could not mark as read: {error}": "无法标为已读:{error}",
|
||
"Could not save draft: {error}": "无法保存草稿:{error}",
|
||
"Could not save filter: {error}": "无法保存过滤器:{error}",
|
||
"Could not save filters: {error}": "无法保存过滤器:{error}",
|
||
"Could not send the receipt: {error}": "无法发送已读回执:{error}",
|
||
"Could not sign in.": "无法登录。",
|
||
"Could not store image: {error}": "无法保存图片:{error}",
|
||
"Could not update labels: {error}": "无法更新标签:{error}",
|
||
"Could not update the Scheduled folder: {error}": "无法更新「定时发送」文件夹:{error}",
|
||
"Could not update: {error}": "无法更新:{error}",
|
||
"Create": "创建",
|
||
"Create an address book first": "请先创建通讯录",
|
||
"Custom colour removed": "已清除自定义颜色",
|
||
"Deactivate": "停用",
|
||
"Delete failed: {error}": "删除失败:{error}",
|
||
"Delete forever": "永久删除",
|
||
"Delete script “{name}”?": "删除脚本「{name}」?",
|
||
"Delete this event?": "删除此日程?",
|
||
"Delete this identity?": "删除此发件身份?",
|
||
"Delete {name}?": "删除 {name}?",
|
||
"Deleted": "已删除",
|
||
"Deletes the whole series. This cannot be undone.": "删除整个系列。此操作无法撤销。",
|
||
"Did you forget the attachment?": "您是不是忘了添加附件?",
|
||
"Discard": "放弃",
|
||
"Discard this draft?": "放弃此草稿?",
|
||
"Edit calendar": "编辑日历",
|
||
"Edit event": "编辑日程",
|
||
"Edit identity": "编辑发件身份",
|
||
"Edit template": "编辑模板",
|
||
"End must be after start": "结束时间必须晚于开始时间",
|
||
"Event duplicated": "日程已创建副本",
|
||
"Everything inside it goes too.": "其中的所有内容也会一并删除。",
|
||
"Filter created": "过滤器已创建",
|
||
"Filter created — it will run on new mail": "过滤器已创建——它将对新邮件生效",
|
||
"Filter saved": "过滤器已保存",
|
||
"Filter saved — it will run on new mail": "过滤器已保存——它将对新邮件生效",
|
||
"Filter saved, but applying it failed: {error}": "过滤器已保存,但应用失败:{error}",
|
||
"Filters saved": "过滤器已保存",
|
||
"Folder changed, but its filter rules could not be updated: {error}": "文件夹已修改,但其过滤规则无法更新:{error}",
|
||
"Folder created": "文件夹已创建",
|
||
"Folder deleted": "文件夹已删除",
|
||
"Folder name": "文件夹名称",
|
||
"Folder name (use / for a subfolder, e.g. Work/Invoices)": "文件夹名称(用 / 创建子文件夹,例如 工作/发票)",
|
||
"Folder name (use / for subfolders, e.g. Work/Invoices)": "文件夹名称(用 / 创建子文件夹,例如 工作/发票)",
|
||
"Folder “{name}” created": "文件夹「{name}」已创建",
|
||
"Forwarded": "已转发",
|
||
"Hand to the server, held until {when} (Ctrl+Enter)": "交给服务器保留至 {when} (Ctrl+Enter)",
|
||
"Hide": "隐藏",
|
||
"Hide quoted text": "隐藏引用文本",
|
||
"Hide this from the compose picker": "写邮件时不提供",
|
||
"Identity saved": "发件身份已保存",
|
||
"Images in signatures need the Files feature, which this account doesn't have.": "签名中的图片需要「文件」功能,而此账户没有该功能。",
|
||
"Invalid address: {address}": "地址无效:{address}",
|
||
"Invalid username or password.": "用户名或密码不正确。",
|
||
"It belongs to a change that was applied to this and all later occurrences, which the server will only edit as a whole. Apply to the entire series instead?": "它属于一项已应用于此日程及其后所有重复日程的修改,而服务器只能整体编辑这项修改。改为应用于整个系列吗?",
|
||
"Label name": "标签名称",
|
||
"Larger than {size} MB limit": "超过 {size} MB 的上限",
|
||
"Message sent": "邮件已发送",
|
||
"Move failed: {error}": "移动失败:{error}",
|
||
"Move “{name}”": "移动「{name}」",
|
||
"Moved": "已移动",
|
||
"Network error. Please check your connection.": "网络错误。请检查您的网络连接。",
|
||
"New all-day event on {date}": "在 {date} 新建全天日程",
|
||
"New event at {time}": "在 {time} 新建日程",
|
||
"New identity": "新建发件身份",
|
||
"No Archive folder found. Create one named “Archive” first.": "未找到归档文件夹。请先创建一个名为「Archive」的文件夹。",
|
||
"No contacts yet": "还没有联系人",
|
||
"No longer shared": "已停止共享",
|
||
"No matches": "没有匹配项",
|
||
"No new mail in your inbox.": "收件箱中没有新邮件。",
|
||
"No results": "没有结果",
|
||
"Nothing here": "这里什么都没有",
|
||
"Only Deleted Items and Junk Mail can be emptied.": "只有已删除邮件和垃圾邮件可以清空。",
|
||
"Please add at least one recipient": "请至少添加一位收件人",
|
||
"Please use an image under 512 KB for signatures.": "签名请使用小于 512 KB 的图片。",
|
||
"Preview": "预览",
|
||
"Read receipt sent": "已读回执已发送",
|
||
"Remove attachments that failed to upload first": "请先移除上传失败的附件",
|
||
"Removed from calendar": "已从日历中移除",
|
||
"Removes this date and leaves the rest of the series.": "删除此日期,保留系列中的其余日程。",
|
||
"Rename address book": "重命名通讯录",
|
||
"Rename category": "重命名分类",
|
||
"Replied": "已回复",
|
||
"Report spam (!)": "举报垃圾邮件 (!)",
|
||
"Response sent": "回复已发送",
|
||
"Revoke “{name}”?": "吊销「{name}」?",
|
||
"Script has errors": "脚本存在错误",
|
||
"Script is valid": "脚本有效",
|
||
"Script name is required": "必须填写脚本名称",
|
||
"Script saved": "脚本已保存",
|
||
"Send (Ctrl+Enter)": "发送 (Ctrl+Enter)",
|
||
"Send anyway": "仍然发送",
|
||
"Send cancelled — the message is back in Drafts": "已取消发送——邮件已回到草稿箱",
|
||
"Send failed: {error}": "发送失败:{error}",
|
||
"Send invites": "发送邀请",
|
||
"Send scheduled for {when}": "已定时于 {when} 发送",
|
||
"Send without a subject?": "不填主题就发送吗?",
|
||
"Share “{name}”": "共享「{name}」",
|
||
"Sharing updated": "共享设置已更新",
|
||
"Show": "显示",
|
||
"Show quoted text": "显示引用文本",
|
||
"Show this in the compose picker": "写邮件时提供",
|
||
"Sign out other sessions?": "退出其他会话?",
|
||
"Sign out others": "退出其他",
|
||
"Stop sharing “{name}”?": "停止共享「{name}」?",
|
||
"Switch to {theme}": "切换到{theme}",
|
||
"Template": "模板",
|
||
"Template name": "模板名称",
|
||
"The contacts in it go too.": "其中的联系人也会一并删除。",
|
||
"The default identity is always offered when composing": "默认发件身份在写邮件时始终提供",
|
||
"The new passwords don't match": "两次输入的新密码不一致",
|
||
"The server scheduled this for {when}, not the time requested.": "服务器把发送时间定在了 {when},而不是您请求的时间。",
|
||
"This date cannot be changed on its own": "此日期无法单独修改",
|
||
"This occurrence": "仅此重复日程",
|
||
"Too many attempts. Please wait a few minutes and try again.": "尝试次数过多。请等待几分钟后再试。",
|
||
"Try another search.": "换个搜索词试试。",
|
||
"Try different keywords or filters.": "换些关键词或过滤条件试试。",
|
||
"Two-factor authentication is off": "两步验证已关闭",
|
||
"Undo window: {seconds}s": "撤销时限:{seconds} 秒",
|
||
"You're all caught up": "您已看完全部邮件",
|
||
"Your browser refused the request: {error}": "您的浏览器拒绝了该请求:{error}",
|
||
"Your browser will ask whether to open mail links in ihasmail": "浏览器会询问是否用 ihasmail 打开邮件链接",
|
||
"Your message mentions an attachment, but nothing is attached.": "您的邮件提到了附件,但没有添加任何附件。",
|
||
"event": "日程",
|
||
"Hide password": "隐藏密码",
|
||
"Show password": "显示密码",
|
||
"Settings reset to defaults": "设置已恢复为默认值",
|
||
"Removed. Mail links will open in whatever your browser falls back to.": "已移除。邮件链接将改由浏览器的后备程序打开。",
|
||
"Edit rule": "编辑规则",
|
||
"Address copied": "地址已复制",
|
||
"Search or create label": "搜索或创建标签",
|
||
"New label name": "新标签名称",
|
||
"That folder no longer exists. Showing your inbox instead.": "该文件夹已不存在,改为显示收件箱。",
|
||
"Labels updated": "标签已更新",
|
||
"Unsubscribe message prepared — just hit Send": "退订邮件已准备好——点击「发送」即可",
|
||
"Maximize": "最大化",
|
||
"Full screen": "全屏",
|
||
"Resize panes": "调整窗格大小",
|
||
"QR code": "二维码",
|
||
"Draft discarded": "草稿已放弃",
|
||
"Draft saved": "草稿已保存",
|
||
"Emptying folder…": "正在清空文件夹…",
|
||
"Nothing unread here": "这里没有未读邮件",
|
||
},
|
||
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} 项" },
|
||
"{n} messages will be permanently deleted.": { other: "将永久删除 {n} 封邮件。" },
|
||
"Signed out {n} other sessions": { other: "已退出 {n} 个其他会话" },
|
||
"applied to {matched} of {n} messages": { other: "已对 {n} 封邮件中的 {matched} 封生效" },
|
||
"Move {n} messages to…": { other: "将 {n} 封邮件移动到…" },
|
||
"This permanently deletes the folder and its {n} messages.": { other: "这将永久删除该文件夹及其中的 {n} 封邮件。" },
|
||
"Added {n} contacts": { other: "已添加 {n} 位联系人" },
|
||
"{n} people will lose access. The contacts in it are not affected.": { other: "{n} 人将失去访问权限。其中的联系人不受影响。" },
|
||
"Imported {n} contacts": { other: "已导入 {n} 位联系人" },
|
||
"Saved for this date. {names} apply to the whole series and were left unchanged.": { other: "已为此日期保存。{names} 适用于整个系列,未作更改。" },
|
||
"{n} people will lose access. Events in it are not affected.": { other: "{n} 人将失去访问权限。其中的日程不受影响。" },
|
||
"{n} messages could not be deleted": { other: "有 {n} 封邮件无法删除" },
|
||
"({n} deleted first)": { other: "(已先删除 {n} 封)" },
|
||
"Marked {n} messages as read": { other: "已将 {n} 封邮件标为已读" },
|
||
"in {n} folders": { other: "在 {n} 个文件夹中" },
|
||
"Deleted {n} messages": { other: "已删除 {n} 封邮件" },
|
||
},
|
||
};
|