Files
notify/frontend/src/lib/i18n/translations.ts
Michael Dong a98e12f286 first commit
2026-02-05 11:24:40 +08:00

432 lines
14 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;