first commit
This commit is contained in:
431
frontend/src/lib/i18n/translations.ts
Normal file
431
frontend/src/lib/i18n/translations.ts
Normal 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;
|
||||
Reference in New Issue
Block a user