first commit

This commit is contained in:
Michael Dong
2026-02-05 11:24:40 +08:00
commit a98e12f286
144 changed files with 26459 additions and 0 deletions

View File

@@ -0,0 +1,431 @@
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;