export const translations = { zh: { // Common loading: "加载中...", save: "保存", cancel: "取消", delete: "删除", saved: "已保存", // Auth login: "登录", register: "注册", logout: "退出登录", username: "用户名", password: "密码", inviteCode: "邀请码", loginWelcome: "欢迎回来,继续管理提醒与通知", loginFailed: "登录失败,请检查用户名与密码", registerTitle: "邀请码注册", registerDesc: "只需几步即可开启高效提醒", registerFailed: "注册失败,请检查邀请码与输入内容", noAccount: "没有账号?去注册(邀请码)", hasAccount: "已有账号?去登录", enterUsername: "请输入用户名", enterPassword: "请输入密码", enterInviteCode: "请输入邀请码", // App Shell appDesc: "轻量好用的提醒与通知管理中心", // Sidebar navigation: "功能导航", navTodo: "Todo", navReminder: "提醒", navSettings: "设置", navNotifications: "未读提醒消息", // Todo Page createTask: "创建任务", createTaskDesc: "记录需要提醒的事项与截止时间", title: "标题", enterTodoTitle: "输入待办标题", dueTime: "截止时间", selectDueTime: "选择截止时间", enableAdvanceReminder: "设置提前提醒", advanceReminder: "提前提醒(分钟)", setRecurring: "设为周期性任务", recurrenceCycle: "重复周期", myTodoList: "我的 Todo 列表", myTodoListDesc: "保持任务清单清晰可见", addTask: "+ 添加任务", due: "截止", noTodo: "暂无 Todo", confirmDelete: "确认删除", confirmDeleteDesc: "确定要删除「{title}」吗?此操作无法撤销。", checkIn: "打卡", checkInSuccess: "打卡成功", checkInDesc: "本周期内已完成,不会再提醒", // Reminder Page createReminder: "创建提醒", createReminderDesc: "为团队或成员分配提醒事项", taskTitle: "任务标题", enterTaskTitle: "输入任务标题", reminderContent: "提醒内容", enterReminderContent: "输入提醒的具体内容", contentReplacedByMarkdown: "已启用 Markdown 格式,此内容将被下方 Markdown 内容替换", reminderTime: "提醒时间", selectReminderTime: "选择提醒时间", setRecurringReminder: "设为周期性提醒", reminderFor: "提醒对象", selectUser: "选择用户", reminderList: "提醒列表", reminderListDesc: "查看待执行的提醒任务", reminder: "提醒", noReminder: "暂无提醒任务", // Bark Settings barkSettings: "Bark 推送设置", barkSettingsDesc: "自定义 Bark 推送的标题、内容和样式", barkTitle: "推送标题", barkTitlePlaceholder: "自定义推送标题(留空使用默认)", barkSubtitle: "推送副标题", barkSubtitlePlaceholder: "可选的副标题", barkUseMarkdown: "使用 Markdown 格式", markdownWillReplaceContent: "此内容将替换上方的「提醒内容」", barkMarkdownContent: "Markdown 内容", barkMarkdownPlaceholder: "支持基础 Markdown 格式", barkLevel: "推送级别", barkLevelActive: "默认", barkLevelTimeSensitive: "时效性通知", barkLevelPassive: "静默通知", barkLevelCritical: "重要警告", barkIcon: "自定义图标", barkIconPlaceholder: "图标 URL(留空使用用户头像)", // Notifications Page notifications: "通知", notificationsDesc: "快速处理待查看的提醒通知", searchNotifications: "搜索通知...", markAllRead: "全部已读", markRead: "标记已读", triggerTime: "触发时间", channel: "渠道", noNotification: "暂无未读通知", // Settings Page settings: "设置", settingsDesc: "自定义提醒方式与通知渠道", avatar: "头像", uploadAvatar: "上传头像", uploading: "上传中...", removeAvatar: "移除头像", avatarHint: "支持 JPG、PNG、GIF、WebP 格式,最大 5MB", barkPushUrl: "Bark 推送地址", timezone: "时区", notificationChannels: "通知渠道", webNotifications: "站内通知", webNotificationsDesc: "站内通知开关", barkAlerts: "Bark 推送", barkAlertsDesc: "Bark 推送开关", // Recurrence hourly: "每小时", daily: "每天", weekly: "每周", monthly: "每月", yearly: "每年", // Recurrence Picker - Modes modeDaily: "每天", modeWeekly: "每周", modeBiweekly: "每两周", modeMonthly: "每月", modeYearly: "每年", // Recurrence Picker - Weekdays sun: "日", mon: "一", tue: "二", wed: "三", thu: "四", fri: "五", sat: "六", // Recurrence Picker - Months jan: "1月", feb: "2月", mar: "3月", apr: "4月", may: "5月", jun: "6月", jul: "7月", aug: "8月", sep: "9月", oct: "10月", nov: "11月", dec: "12月", // Recurrence Picker - UI selectWeekday: "选择星期几", selectMonthday: "选择日期", selectYearlyDate: "选择日期", everyMonth: "每月", everyYear: "每年", dayUnit: "日", dailyNoOptions: "将按当前时间每天重复", willRepeat: "重复规则:", recurrencePreviewDaily: "每天 {time}", recurrencePreviewWeekly: "每周{weekday} {time}", recurrencePreviewBiweekly: "每两周的周{weekday} {time}", recurrencePreviewMonthly: "每月 {day} 日 {time}", recurrencePreviewYearly: "每年 {month} {day} 日 {time}", // DateTime Picker selectDateTime: "选择日期和时间", time: "时间", hour: "时", minute: "分", now: "现在", // Language language: "语言", chinese: "中文", english: "English", // Invite Management navInvites: "邀请管理", inviteManagement: "邀请管理", inviteManagementDesc: "生成邀请码,追踪注册用户", createInvite: "生成邀请码", createInviteDesc: "创建新的邀请码分享给他人注册", maxUses: "最大使用次数", expiresInDays: "有效期(天)", generateInvite: "生成邀请码", myInvites: "我的邀请码", myInvitesDesc: "查看已生成的邀请码及注册情况", noInvites: "暂无邀请码", usage: "使用情况", expiresAt: "过期时间", status: "状态", statusActive: "有效", statusExpired: "已过期", statusRevoked: "已撤销", statusExhausted: "已用完", revoke: "撤销", revokeInvite: "撤销邀请码", revokeInviteDesc: "确定要撤销邀请码「{code}」吗?撤销后将无法使用。", registeredUsers: "注册用户", noRegisteredUsers: "暂无用户通过此邀请码注册", viewDetails: "查看详情", copyCode: "复制邀请码", copied: "已复制", }, en: { // Common loading: "Loading...", save: "Save", cancel: "Cancel", delete: "Delete", saved: "Saved", // Auth login: "Login", register: "Register", logout: "Logout", username: "Username", password: "Password", inviteCode: "Invite Code", loginWelcome: "Welcome back, manage your reminders and notifications", loginFailed: "Login failed, please check your username and password", registerTitle: "Register with Invite Code", registerDesc: "Get started with efficient reminders in just a few steps", registerFailed: "Registration failed, please check your invite code", noAccount: "No account? Register with invite code", hasAccount: "Already have an account? Login", enterUsername: "Enter username", enterPassword: "Enter password", enterInviteCode: "Enter invite code", // App Shell appDesc: "A lightweight reminder and notification management center", // Sidebar navigation: "Navigation", navTodo: "Todo", navReminder: "Reminders", navSettings: "Settings", navNotifications: "Unread Notifications", // Todo Page createTask: "Create Task", createTaskDesc: "Record tasks and their due times", title: "Title", enterTodoTitle: "Enter todo title", dueTime: "Due Time", selectDueTime: "Select due time", enableAdvanceReminder: "Enable Advance Reminder", advanceReminder: "Advance Reminder (minutes)", setRecurring: "Set as recurring task", recurrenceCycle: "Recurrence Cycle", myTodoList: "My Todo List", myTodoListDesc: "Keep your task list clear and visible", addTask: "+ Add Task", due: "Due", noTodo: "No Todo items", confirmDelete: "Confirm Delete", confirmDeleteDesc: "Are you sure you want to delete \"{title}\"? This action cannot be undone.", checkIn: "Check In", checkInSuccess: "Checked In", checkInDesc: "Completed for this cycle, no more reminders", // Reminder Page createReminder: "Create Reminder", createReminderDesc: "Assign reminders to team members", taskTitle: "Task Title", enterTaskTitle: "Enter task title", reminderContent: "Reminder Content", enterReminderContent: "Enter reminder content", contentReplacedByMarkdown: "Markdown enabled, this content will be replaced by Markdown content below", reminderTime: "Reminder Time", selectReminderTime: "Select reminder time", setRecurringReminder: "Set as recurring reminder", reminderFor: "Reminder For", selectUser: "Select user", reminderList: "Reminder List", reminderListDesc: "View pending reminder tasks", reminder: "Reminder", noReminder: "No reminder tasks", // Bark Settings barkSettings: "Bark Push Settings", barkSettingsDesc: "Customize Bark push title, content and style", barkTitle: "Push Title", barkTitlePlaceholder: "Custom push title (leave empty for default)", barkSubtitle: "Push Subtitle", barkSubtitlePlaceholder: "Optional subtitle", barkUseMarkdown: "Use Markdown Format", markdownWillReplaceContent: "This content will replace the reminder content above", barkMarkdownContent: "Markdown Content", barkMarkdownPlaceholder: "Supports basic Markdown format", barkLevel: "Push Level", barkLevelActive: "Default", barkLevelTimeSensitive: "Time Sensitive", barkLevelPassive: "Passive", barkLevelCritical: "Critical", barkIcon: "Custom Icon", barkIconPlaceholder: "Icon URL (leave empty to use avatar)", // Notifications Page notifications: "Notifications", notificationsDesc: "Quickly handle pending notifications", searchNotifications: "Search notifications...", markAllRead: "Mark All Read", markRead: "Mark Read", triggerTime: "Trigger Time", channel: "Channel", noNotification: "No unread notifications", // Settings Page settings: "Settings", settingsDesc: "Customize reminder methods and notification channels", avatar: "Avatar", uploadAvatar: "Upload Avatar", uploading: "Uploading...", removeAvatar: "Remove Avatar", avatarHint: "Supports JPG, PNG, GIF, WebP formats. Max 5MB", barkPushUrl: "Bark Push URL", timezone: "Timezone", notificationChannels: "Notification Channels", webNotifications: "Web Notifications", webNotificationsDesc: "Web notification toggle", barkAlerts: "Bark Alerts", barkAlertsDesc: "Bark push notification toggle", // Recurrence hourly: "Hourly", daily: "Daily", weekly: "Weekly", monthly: "Monthly", yearly: "Yearly", // Recurrence Picker - Modes modeDaily: "Daily", modeWeekly: "Weekly", modeBiweekly: "Biweekly", modeMonthly: "Monthly", modeYearly: "Yearly", // Recurrence Picker - Weekdays sun: "Su", mon: "Mo", tue: "Tu", wed: "We", thu: "Th", fri: "Fr", sat: "Sa", // Recurrence Picker - Months jan: "Jan", feb: "Feb", mar: "Mar", apr: "Apr", may: "May", jun: "Jun", jul: "Jul", aug: "Aug", sep: "Sep", oct: "Oct", nov: "Nov", dec: "Dec", // Recurrence Picker - UI selectWeekday: "Select weekday", selectMonthday: "Select day", selectYearlyDate: "Select date", everyMonth: "Every month on", everyYear: "Every year on", dayUnit: "", dailyNoOptions: "Will repeat daily at the selected time", willRepeat: "Will repeat:", recurrencePreviewDaily: "Every day at {time}", recurrencePreviewWeekly: "Every {weekday} at {time}", recurrencePreviewBiweekly: "Every other {weekday} at {time}", recurrencePreviewMonthly: "Every month on day {day} at {time}", recurrencePreviewYearly: "Every year on {month} {day} at {time}", // DateTime Picker selectDateTime: "Select date and time", time: "Time", hour: "Hour", minute: "Min", now: "Now", // Language language: "Language", chinese: "中文", english: "English", // Invite Management navInvites: "Invites", inviteManagement: "Invite Management", inviteManagementDesc: "Generate invite codes and track registrations", createInvite: "Create Invite", createInviteDesc: "Generate a new invite code to share with others", maxUses: "Max Uses", expiresInDays: "Expires In (days)", generateInvite: "Generate Invite", myInvites: "My Invites", myInvitesDesc: "View your invite codes and registration status", noInvites: "No invite codes yet", usage: "Usage", expiresAt: "Expires At", status: "Status", statusActive: "Active", statusExpired: "Expired", statusRevoked: "Revoked", statusExhausted: "Exhausted", revoke: "Revoke", revokeInvite: "Revoke Invite", revokeInviteDesc: "Are you sure you want to revoke invite code \"{code}\"? It will no longer be usable.", registeredUsers: "Registered Users", noRegisteredUsers: "No users have registered with this invite code", viewDetails: "View Details", copyCode: "Copy Code", copied: "Copied", }, } as const; export type Locale = keyof typeof translations; export type TranslationKey = keyof typeof translations.zh;