chore: remove sidebar
segment path in intl message
This commit is contained in:
parent
ea32f72313
commit
2dd6612e45
284
messages/en.json
284
messages/en.json
@ -380,154 +380,152 @@
|
||||
}
|
||||
},
|
||||
"Dashboard": {
|
||||
"sidebar": {
|
||||
"dashboard": {
|
||||
"title": "Dashboard"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"items": {
|
||||
"profile": {
|
||||
"title": "Profile",
|
||||
"description": "Manage your account information",
|
||||
"avatar": {
|
||||
"title": "Avatar",
|
||||
"description": "Click upload button to upload a custom one",
|
||||
"recommendation": "An avatar is optional but strongly recommended",
|
||||
"uploading": "Uploading...",
|
||||
"uploadAvatar": "Upload Avatar",
|
||||
"success": "Avatar updated successfully",
|
||||
"fail": "Failed to update avatar"
|
||||
},
|
||||
"name": {
|
||||
"title": "Name",
|
||||
"description": "Please enter your display name",
|
||||
"placeholder": "Enter your name",
|
||||
"minLength": "Please use 3 characters at minimum",
|
||||
"maxLength": "Please use 30 characters at maximum",
|
||||
"hint": "Please use 3-30 characters for your name",
|
||||
"success": "Name updated successfully",
|
||||
"fail": "Failed to update name",
|
||||
"saving": "Saving...",
|
||||
"save": "Save"
|
||||
}
|
||||
"dashboard": {
|
||||
"title": "Dashboard"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"items": {
|
||||
"profile": {
|
||||
"title": "Profile",
|
||||
"description": "Manage your account information",
|
||||
"avatar": {
|
||||
"title": "Avatar",
|
||||
"description": "Click upload button to upload a custom one",
|
||||
"recommendation": "An avatar is optional but strongly recommended",
|
||||
"uploading": "Uploading...",
|
||||
"uploadAvatar": "Upload Avatar",
|
||||
"success": "Avatar updated successfully",
|
||||
"fail": "Failed to update avatar"
|
||||
},
|
||||
"billing": {
|
||||
"title": "Billing",
|
||||
"description": "Manage your subscription and billing details",
|
||||
"status": {
|
||||
"active": "Active",
|
||||
"trial": "Trial",
|
||||
"free": "Free",
|
||||
"lifetime": "Lifetime"
|
||||
},
|
||||
"interval": {
|
||||
"month": "month",
|
||||
"year": "year",
|
||||
"oneTime": "one-time"
|
||||
},
|
||||
"currentPlan": {
|
||||
"title": "Current Plan",
|
||||
"description": "Your current plan details"
|
||||
},
|
||||
"nextBillingDate": "Next billing date:",
|
||||
"trialEnds": "Trial ends:",
|
||||
"manageSubscription": "Manage Subscription",
|
||||
"upgradeMessage": "Upgrade to a paid plan to access more features",
|
||||
"paymentMethod": {
|
||||
"title": "Payment Method",
|
||||
"description": "Manage your payment methods",
|
||||
"manageMessage": "Manage your payment methods through the Stripe Customer Portal.",
|
||||
"securityMessage": "You can add, remove, or update your payment methods securely through the Stripe portal.",
|
||||
"noMethodsMessage": "No payment methods on file.",
|
||||
"upgradePromptMessage": "You'll be prompted to add a payment method when upgrading to a paid plan."
|
||||
},
|
||||
"managePaymentMethods": "Manage Payment Methods",
|
||||
"upgradePlan": {
|
||||
"title": "Upgrade Your Plan",
|
||||
"description": "Choose a plan that works for you"
|
||||
},
|
||||
"trialDays": "{days} day trial",
|
||||
"upgradeToPlan": "Upgrade to {planName}",
|
||||
"customPricing": "Custom Pricing",
|
||||
"contactSales": "Contact Sales",
|
||||
"billingHistory": {
|
||||
"title": "Billing History",
|
||||
"description": "View and download your past invoices",
|
||||
"accessMessage": "Access your billing history through the Stripe Customer Portal",
|
||||
"noHistoryMessage": "No billing history available"
|
||||
},
|
||||
"viewBillingHistory": "View Billing History",
|
||||
"CustomerPortalButton": {
|
||||
"loading": "Loading...",
|
||||
"createCustomerPortalFailed": "Failed to open customer portal"
|
||||
},
|
||||
"retry": "Retry",
|
||||
"errorMessage": "Failed to get billing data",
|
||||
"freePlanMessage": "You are currently on the free plan with limited features",
|
||||
"lifetimeMessage": "You have lifetime access to all premium features"
|
||||
"name": {
|
||||
"title": "Name",
|
||||
"description": "Please enter your display name",
|
||||
"placeholder": "Enter your name",
|
||||
"minLength": "Please use 3 characters at minimum",
|
||||
"maxLength": "Please use 30 characters at maximum",
|
||||
"hint": "Please use 3-30 characters for your name",
|
||||
"success": "Name updated successfully",
|
||||
"fail": "Failed to update name",
|
||||
"saving": "Saving...",
|
||||
"save": "Save"
|
||||
}
|
||||
},
|
||||
"billing": {
|
||||
"title": "Billing",
|
||||
"description": "Manage your subscription and billing details",
|
||||
"status": {
|
||||
"active": "Active",
|
||||
"trial": "Trial",
|
||||
"free": "Free",
|
||||
"lifetime": "Lifetime"
|
||||
},
|
||||
"notification": {
|
||||
"title": "Notification",
|
||||
"description": "Manage your notification preferences",
|
||||
"newsletter": {
|
||||
"title": "Newsletter Subscription",
|
||||
"description": "Manage your newsletter subscription preferences",
|
||||
"label": "Subscribe to newsletter",
|
||||
"hint": "You can change your subscription preferences at any time",
|
||||
"emailRequired": "Email is required to subscribe to the newsletter",
|
||||
"subscribeSuccess": "Successfully subscribed to the newsletter",
|
||||
"subscribeFail": "Failed to subscribe to the newsletter",
|
||||
"unsubscribeSuccess": "Successfully unsubscribed from the newsletter",
|
||||
"unsubscribeFail": "Failed to unsubscribe from the newsletter",
|
||||
"error": "An error occurred while updating your subscription"
|
||||
}
|
||||
"interval": {
|
||||
"month": "month",
|
||||
"year": "year",
|
||||
"oneTime": "one-time"
|
||||
},
|
||||
"security": {
|
||||
"title": "Security",
|
||||
"description": "Manage your security settings",
|
||||
"updatePassword": {
|
||||
"title": "Change Password",
|
||||
"description": "Enter your current password and a new password",
|
||||
"currentPassword": "Current Password",
|
||||
"currentRequired": "Current password is required",
|
||||
"newPassword": "New Password",
|
||||
"newMinLength": "Password must be at least 8 characters",
|
||||
"hint": "Please use at least 8 characters for password",
|
||||
"showPassword": "Show password",
|
||||
"hidePassword": "Hide password",
|
||||
"success": "Password updated successfully",
|
||||
"fail": "Failed to update password",
|
||||
"saving": "Saving...",
|
||||
"save": "Save"
|
||||
},
|
||||
"resetPassword": {
|
||||
"title": "Reset Password",
|
||||
"description": "Reset password to enable email login",
|
||||
"info": "Resetting your password will allow you to sign in using your email and password in addition to your social login methods. You will receive an email with instructions to reset your password",
|
||||
"button": "Reset Password"
|
||||
},
|
||||
"deleteAccount": {
|
||||
"title": "Delete Account",
|
||||
"description": "Permanently remove your account and all of its contents",
|
||||
"warning": "This action is not reversible, so please continue with caution",
|
||||
"button": "Delete Account",
|
||||
"confirmTitle": "Delete Account",
|
||||
"confirmDescription": "Are you sure you want to delete your account? This action cannot be undone.",
|
||||
"confirm": "Delete",
|
||||
"cancel": "Cancel",
|
||||
"deleting": "Deleting...",
|
||||
"success": "Account deleted successfully",
|
||||
"fail": "Failed to delete account"
|
||||
}
|
||||
"currentPlan": {
|
||||
"title": "Current Plan",
|
||||
"description": "Your current plan details"
|
||||
},
|
||||
"nextBillingDate": "Next billing date:",
|
||||
"trialEnds": "Trial ends:",
|
||||
"manageSubscription": "Manage Subscription",
|
||||
"upgradeMessage": "Upgrade to a paid plan to access more features",
|
||||
"paymentMethod": {
|
||||
"title": "Payment Method",
|
||||
"description": "Manage your payment methods",
|
||||
"manageMessage": "Manage your payment methods through the Stripe Customer Portal.",
|
||||
"securityMessage": "You can add, remove, or update your payment methods securely through the Stripe portal.",
|
||||
"noMethodsMessage": "No payment methods on file.",
|
||||
"upgradePromptMessage": "You'll be prompted to add a payment method when upgrading to a paid plan."
|
||||
},
|
||||
"managePaymentMethods": "Manage Payment Methods",
|
||||
"upgradePlan": {
|
||||
"title": "Upgrade Your Plan",
|
||||
"description": "Choose a plan that works for you"
|
||||
},
|
||||
"trialDays": "{days} day trial",
|
||||
"upgradeToPlan": "Upgrade to {planName}",
|
||||
"customPricing": "Custom Pricing",
|
||||
"contactSales": "Contact Sales",
|
||||
"billingHistory": {
|
||||
"title": "Billing History",
|
||||
"description": "View and download your past invoices",
|
||||
"accessMessage": "Access your billing history through the Stripe Customer Portal",
|
||||
"noHistoryMessage": "No billing history available"
|
||||
},
|
||||
"viewBillingHistory": "View Billing History",
|
||||
"CustomerPortalButton": {
|
||||
"loading": "Loading...",
|
||||
"createCustomerPortalFailed": "Failed to open customer portal"
|
||||
},
|
||||
"retry": "Retry",
|
||||
"errorMessage": "Failed to get billing data",
|
||||
"freePlanMessage": "You are currently on the free plan with limited features",
|
||||
"lifetimeMessage": "You have lifetime access to all premium features"
|
||||
},
|
||||
"notification": {
|
||||
"title": "Notification",
|
||||
"description": "Manage your notification preferences",
|
||||
"newsletter": {
|
||||
"title": "Newsletter Subscription",
|
||||
"description": "Manage your newsletter subscription preferences",
|
||||
"label": "Subscribe to newsletter",
|
||||
"hint": "You can change your subscription preferences at any time",
|
||||
"emailRequired": "Email is required to subscribe to the newsletter",
|
||||
"subscribeSuccess": "Successfully subscribed to the newsletter",
|
||||
"subscribeFail": "Failed to subscribe to the newsletter",
|
||||
"unsubscribeSuccess": "Successfully unsubscribed from the newsletter",
|
||||
"unsubscribeFail": "Failed to unsubscribe from the newsletter",
|
||||
"error": "An error occurred while updating your subscription"
|
||||
}
|
||||
},
|
||||
"security": {
|
||||
"title": "Security",
|
||||
"description": "Manage your security settings",
|
||||
"updatePassword": {
|
||||
"title": "Change Password",
|
||||
"description": "Enter your current password and a new password",
|
||||
"currentPassword": "Current Password",
|
||||
"currentRequired": "Current password is required",
|
||||
"newPassword": "New Password",
|
||||
"newMinLength": "Password must be at least 8 characters",
|
||||
"hint": "Please use at least 8 characters for password",
|
||||
"showPassword": "Show password",
|
||||
"hidePassword": "Hide password",
|
||||
"success": "Password updated successfully",
|
||||
"fail": "Failed to update password",
|
||||
"saving": "Saving...",
|
||||
"save": "Save"
|
||||
},
|
||||
"resetPassword": {
|
||||
"title": "Reset Password",
|
||||
"description": "Reset password to enable email login",
|
||||
"info": "Resetting your password will allow you to sign in using your email and password in addition to your social login methods. You will receive an email with instructions to reset your password",
|
||||
"button": "Reset Password"
|
||||
},
|
||||
"deleteAccount": {
|
||||
"title": "Delete Account",
|
||||
"description": "Permanently remove your account and all of its contents",
|
||||
"warning": "This action is not reversible, so please continue with caution",
|
||||
"button": "Delete Account",
|
||||
"confirmTitle": "Delete Account",
|
||||
"confirmDescription": "Are you sure you want to delete your account? This action cannot be undone.",
|
||||
"confirm": "Delete",
|
||||
"cancel": "Cancel",
|
||||
"deleting": "Deleting...",
|
||||
"success": "Account deleted successfully",
|
||||
"fail": "Failed to delete account"
|
||||
}
|
||||
}
|
||||
},
|
||||
"upgrade": {
|
||||
"title": "Upgrade",
|
||||
"description": "Upgrade to Pro to access all features",
|
||||
"button": "Upgrade"
|
||||
}
|
||||
},
|
||||
"upgrade": {
|
||||
"title": "Upgrade",
|
||||
"description": "Upgrade to Pro to access all features",
|
||||
"button": "Upgrade"
|
||||
}
|
||||
},
|
||||
"Mail": {
|
||||
@ -552,4 +550,4 @@
|
||||
"subject": "Thanks for subscribing"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
278
messages/zh.json
278
messages/zh.json
@ -380,151 +380,149 @@
|
||||
}
|
||||
},
|
||||
"Dashboard": {
|
||||
"sidebar": {
|
||||
"dashboard": {
|
||||
"title": "仪表盘"
|
||||
},
|
||||
"settings": {
|
||||
"title": "设置",
|
||||
"items": {
|
||||
"profile": {
|
||||
"title": "账户",
|
||||
"description": "管理您的账户信息",
|
||||
"avatar": {
|
||||
"title": "头像",
|
||||
"description": "点击上传按钮上传自定义头像",
|
||||
"recommendation": "头像是可选的,但强烈推荐设置",
|
||||
"uploading": "上传中...",
|
||||
"uploadAvatar": "上传头像",
|
||||
"success": "头像更新成功",
|
||||
"fail": "更新头像失败"
|
||||
},
|
||||
"name": {
|
||||
"title": "名字",
|
||||
"description": "请输入您的名字",
|
||||
"placeholder": "名字",
|
||||
"minLength": "请至少使用 3 个字符",
|
||||
"maxLength": "请最多使用 30 个字符",
|
||||
"hint": "请使用 3-30 个字符",
|
||||
"success": "名字更新成功",
|
||||
"fail": "更新名字失败"
|
||||
}
|
||||
"dashboard": {
|
||||
"title": "仪表盘"
|
||||
},
|
||||
"settings": {
|
||||
"title": "设置",
|
||||
"items": {
|
||||
"profile": {
|
||||
"title": "账户",
|
||||
"description": "管理您的账户信息",
|
||||
"avatar": {
|
||||
"title": "头像",
|
||||
"description": "点击上传按钮上传自定义头像",
|
||||
"recommendation": "头像是可选的,但强烈推荐设置",
|
||||
"uploading": "上传中...",
|
||||
"uploadAvatar": "上传头像",
|
||||
"success": "头像更新成功",
|
||||
"fail": "更新头像失败"
|
||||
},
|
||||
"billing": {
|
||||
"title": "账单",
|
||||
"description": "管理您的订阅和账单信息",
|
||||
"status": {
|
||||
"active": "已激活",
|
||||
"trial": "试用中",
|
||||
"free": "免费版",
|
||||
"lifetime": "终身版"
|
||||
},
|
||||
"interval": {
|
||||
"month": "月",
|
||||
"year": "年",
|
||||
"oneTime": "一次性"
|
||||
},
|
||||
"currentPlan": {
|
||||
"title": "当前方案",
|
||||
"description": "您当前的方案详情"
|
||||
},
|
||||
"nextBillingDate": "下次账单日期:",
|
||||
"trialEnds": "试用结束日期:",
|
||||
"manageSubscription": "管理订阅",
|
||||
"upgradeMessage": "升级到付费方案以获取更多功能",
|
||||
"paymentMethod": {
|
||||
"title": "支付方式",
|
||||
"description": "管理您的支付方式",
|
||||
"manageMessage": "通过 Stripe 客户门户管理您的支付方式。",
|
||||
"securityMessage": "您可以通过 Stripe 门户安全地添加、删除或更新您的支付方式。",
|
||||
"noMethodsMessage": "没有支付方式记录。",
|
||||
"upgradePromptMessage": "升级到付费方案时,系统会提示您添加支付方式。"
|
||||
},
|
||||
"managePaymentMethods": "管理支付方式",
|
||||
"upgradePlan": {
|
||||
"title": "升级您的方案",
|
||||
"description": "选择适合您的方案"
|
||||
},
|
||||
"trialDays": "{days} 天试用期",
|
||||
"upgradeToPlan": "升级到 {planName}",
|
||||
"customPricing": "定制价格",
|
||||
"contactSales": "联系销售",
|
||||
"billingHistory": {
|
||||
"title": "账单历史",
|
||||
"description": "查看并下载您的历史账单",
|
||||
"accessMessage": "通过 Stripe 客户门户访问您的账单历史",
|
||||
"noHistoryMessage": "没有可用的账单历史"
|
||||
},
|
||||
"viewBillingHistory": "查看账单历史",
|
||||
"CustomerPortalButton": {
|
||||
"loading": "加载中...",
|
||||
"createCustomerPortalFailed": "打开Stripe客户页面失败"
|
||||
},
|
||||
"retry": "重试",
|
||||
"freePlanMessage": "您当前使用的是功能有限的免费方案",
|
||||
"lifetimeMessage": "您拥有所有高级功能的终身访问权限"
|
||||
"name": {
|
||||
"title": "名字",
|
||||
"description": "请输入您的名字",
|
||||
"placeholder": "名字",
|
||||
"minLength": "请至少使用 3 个字符",
|
||||
"maxLength": "请最多使用 30 个字符",
|
||||
"hint": "请使用 3-30 个字符",
|
||||
"success": "名字更新成功",
|
||||
"fail": "更新名字失败"
|
||||
}
|
||||
},
|
||||
"billing": {
|
||||
"title": "账单",
|
||||
"description": "管理您的订阅和账单信息",
|
||||
"status": {
|
||||
"active": "已激活",
|
||||
"trial": "试用中",
|
||||
"free": "免费版",
|
||||
"lifetime": "终身版"
|
||||
},
|
||||
"notification": {
|
||||
"title": "通知",
|
||||
"description": "管理您的通知设置",
|
||||
"newsletter": {
|
||||
"title": "订阅",
|
||||
"description": "管理您的邮件列表订阅偏好",
|
||||
"label": "订阅邮件列表",
|
||||
"hint": "您可以随时更改订阅偏好",
|
||||
"emailRequired": "订阅邮件列表需要邮箱",
|
||||
"subscribeSuccess": "成功订阅邮件列表",
|
||||
"subscribeFail": "订阅邮件列表失败",
|
||||
"unsubscribeSuccess": "成功取消订阅邮件列表",
|
||||
"unsubscribeFail": "取消订阅邮件列表失败",
|
||||
"error": "更新订阅时发生错误"
|
||||
}
|
||||
"interval": {
|
||||
"month": "月",
|
||||
"year": "年",
|
||||
"oneTime": "一次性"
|
||||
},
|
||||
"security": {
|
||||
"title": "安全",
|
||||
"description": "管理您的安全设置",
|
||||
"updatePassword": {
|
||||
"title": "修改密码",
|
||||
"description": "输入您的当前密码和新密码",
|
||||
"currentPassword": "当前密码",
|
||||
"currentRequired": "当前密码是必填项",
|
||||
"newPassword": "新密码",
|
||||
"newMinLength": "密码必须至少包含 8 个字符",
|
||||
"hint": "请至少使用 8 个字符作为密码",
|
||||
"showPassword": "显示密码",
|
||||
"hidePassword": "隐藏密码",
|
||||
"success": "密码更新成功",
|
||||
"fail": "更新密码失败",
|
||||
"saving": "保存中...",
|
||||
"save": "保存"
|
||||
},
|
||||
"resetPassword": {
|
||||
"title": "重置密码",
|
||||
"description": "重置密码以启用邮箱登录",
|
||||
"info": "重置密码将允许您除了社交登录方式外,还可以使用邮箱和密码登录,您将收到一封包含重置密码链接的电子邮件",
|
||||
"button": "重置密码"
|
||||
},
|
||||
"deleteAccount": {
|
||||
"title": "删除账号",
|
||||
"description": "永久删除您的账号和所有内容",
|
||||
"warning": "此操作是不可逆的,请谨慎操作",
|
||||
"button": "删除账号",
|
||||
"confirmTitle": "删除账号",
|
||||
"confirmDescription": "您确定要删除您的账号吗?此操作无法撤销",
|
||||
"confirm": "删除",
|
||||
"cancel": "取消",
|
||||
"deleting": "删除中...",
|
||||
"success": "账号删除成功",
|
||||
"fail": "删除账号失败"
|
||||
}
|
||||
"currentPlan": {
|
||||
"title": "当前方案",
|
||||
"description": "您当前的方案详情"
|
||||
},
|
||||
"nextBillingDate": "下次账单日期:",
|
||||
"trialEnds": "试用结束日期:",
|
||||
"manageSubscription": "管理订阅",
|
||||
"upgradeMessage": "升级到付费方案以获取更多功能",
|
||||
"paymentMethod": {
|
||||
"title": "支付方式",
|
||||
"description": "管理您的支付方式",
|
||||
"manageMessage": "通过 Stripe 客户门户管理您的支付方式。",
|
||||
"securityMessage": "您可以通过 Stripe 门户安全地添加、删除或更新您的支付方式。",
|
||||
"noMethodsMessage": "没有支付方式记录。",
|
||||
"upgradePromptMessage": "升级到付费方案时,系统会提示您添加支付方式。"
|
||||
},
|
||||
"managePaymentMethods": "管理支付方式",
|
||||
"upgradePlan": {
|
||||
"title": "升级您的方案",
|
||||
"description": "选择适合您的方案"
|
||||
},
|
||||
"trialDays": "{days} 天试用期",
|
||||
"upgradeToPlan": "升级到 {planName}",
|
||||
"customPricing": "定制价格",
|
||||
"contactSales": "联系销售",
|
||||
"billingHistory": {
|
||||
"title": "账单历史",
|
||||
"description": "查看并下载您的历史账单",
|
||||
"accessMessage": "通过 Stripe 客户门户访问您的账单历史",
|
||||
"noHistoryMessage": "没有可用的账单历史"
|
||||
},
|
||||
"viewBillingHistory": "查看账单历史",
|
||||
"CustomerPortalButton": {
|
||||
"loading": "加载中...",
|
||||
"createCustomerPortalFailed": "打开Stripe客户页面失败"
|
||||
},
|
||||
"retry": "重试",
|
||||
"freePlanMessage": "您当前使用的是功能有限的免费方案",
|
||||
"lifetimeMessage": "您拥有所有高级功能的终身访问权限"
|
||||
},
|
||||
"notification": {
|
||||
"title": "通知",
|
||||
"description": "管理您的通知设置",
|
||||
"newsletter": {
|
||||
"title": "订阅",
|
||||
"description": "管理您的邮件列表订阅偏好",
|
||||
"label": "订阅邮件列表",
|
||||
"hint": "您可以随时更改订阅偏好",
|
||||
"emailRequired": "订阅邮件列表需要邮箱",
|
||||
"subscribeSuccess": "成功订阅邮件列表",
|
||||
"subscribeFail": "订阅邮件列表失败",
|
||||
"unsubscribeSuccess": "成功取消订阅邮件列表",
|
||||
"unsubscribeFail": "取消订阅邮件列表失败",
|
||||
"error": "更新订阅时发生错误"
|
||||
}
|
||||
},
|
||||
"security": {
|
||||
"title": "安全",
|
||||
"description": "管理您的安全设置",
|
||||
"updatePassword": {
|
||||
"title": "修改密码",
|
||||
"description": "输入您的当前密码和新密码",
|
||||
"currentPassword": "当前密码",
|
||||
"currentRequired": "当前密码是必填项",
|
||||
"newPassword": "新密码",
|
||||
"newMinLength": "密码必须至少包含 8 个字符",
|
||||
"hint": "请至少使用 8 个字符作为密码",
|
||||
"showPassword": "显示密码",
|
||||
"hidePassword": "隐藏密码",
|
||||
"success": "密码更新成功",
|
||||
"fail": "更新密码失败",
|
||||
"saving": "保存中...",
|
||||
"save": "保存"
|
||||
},
|
||||
"resetPassword": {
|
||||
"title": "重置密码",
|
||||
"description": "重置密码以启用邮箱登录",
|
||||
"info": "重置密码将允许您除了社交登录方式外,还可以使用邮箱和密码登录,您将收到一封包含重置密码链接的电子邮件",
|
||||
"button": "重置密码"
|
||||
},
|
||||
"deleteAccount": {
|
||||
"title": "删除账号",
|
||||
"description": "永久删除您的账号和所有内容",
|
||||
"warning": "此操作是不可逆的,请谨慎操作",
|
||||
"button": "删除账号",
|
||||
"confirmTitle": "删除账号",
|
||||
"confirmDescription": "您确定要删除您的账号吗?此操作无法撤销",
|
||||
"confirm": "删除",
|
||||
"cancel": "取消",
|
||||
"deleting": "删除中...",
|
||||
"success": "账号删除成功",
|
||||
"fail": "删除账号失败"
|
||||
}
|
||||
}
|
||||
},
|
||||
"upgrade": {
|
||||
"title": "升级",
|
||||
"description": "升级到Pro以获取所有功能",
|
||||
"button": "升级"
|
||||
}
|
||||
},
|
||||
"upgrade": {
|
||||
"title": "升级",
|
||||
"description": "升级到Pro以获取所有功能",
|
||||
"button": "升级"
|
||||
}
|
||||
},
|
||||
"Mail": {
|
||||
@ -549,4 +547,4 @@
|
||||
"subject": "感谢您的订阅"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
import { DashboardHeader } from '@/components/dashboard/dashboard-header';
|
||||
import { useTranslations } from 'next-intl';
|
||||
|
||||
export default function AIAudioPage() {
|
||||
const t = useTranslations('Dashboard.sidebar.ai');
|
||||
|
||||
const breadcrumbs = [
|
||||
{
|
||||
label: t('title'),
|
||||
isCurrentPage: false,
|
||||
},
|
||||
{
|
||||
label: t('items.audio.title'),
|
||||
isCurrentPage: true,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
<DashboardHeader breadcrumbs={breadcrumbs} />
|
||||
|
||||
<div className="px-4 lg:px-6 py-16">
|
||||
<div className="max-w-5xl mx-auto space-y-10">
|
||||
<div>
|
||||
<h1 className="text-3xl font-bold tracking-tight">
|
||||
{t('items.audio.title')}
|
||||
</h1>
|
||||
<p className="text-muted-foreground mt-2">
|
||||
{t('items.audio.description')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
import { DashboardHeader } from '@/components/dashboard/dashboard-header';
|
||||
import { useTranslations } from 'next-intl';
|
||||
|
||||
export default function AIImagePage() {
|
||||
const t = useTranslations('Dashboard.sidebar.ai');
|
||||
|
||||
const breadcrumbs = [
|
||||
{
|
||||
label: t('title'),
|
||||
isCurrentPage: false,
|
||||
},
|
||||
{
|
||||
label: t('items.image.title'),
|
||||
isCurrentPage: true,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
<DashboardHeader breadcrumbs={breadcrumbs} />
|
||||
|
||||
<div className="px-4 lg:px-6 py-16">
|
||||
<div className="max-w-5xl mx-auto space-y-10">
|
||||
<div>
|
||||
<h1 className="text-3xl font-bold tracking-tight">
|
||||
{t('items.image.title')}
|
||||
</h1>
|
||||
<p className="text-muted-foreground mt-2">
|
||||
{t('items.image.description')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -1,37 +0,0 @@
|
||||
import { DashboardHeader } from '@/components/dashboard/dashboard-header';
|
||||
import { useTranslations } from 'next-intl';
|
||||
|
||||
export default function AITextPage() {
|
||||
const t = useTranslations('Dashboard.sidebar.ai');
|
||||
|
||||
const breadcrumbs = [
|
||||
{
|
||||
label: t('title'),
|
||||
isCurrentPage: false,
|
||||
},
|
||||
{
|
||||
label: t('items.text.title'),
|
||||
isCurrentPage: true,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
<DashboardHeader breadcrumbs={breadcrumbs} />
|
||||
|
||||
<div className="px-4 lg:px-6 py-16">
|
||||
<div className="max-w-5xl mx-auto space-y-10">
|
||||
<div>
|
||||
<h1 className="text-3xl font-bold tracking-tight">
|
||||
{t('items.text.title')}
|
||||
</h1>
|
||||
<p className="text-muted-foreground mt-2">
|
||||
{t('items.text.description')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -1,37 +0,0 @@
|
||||
import { DashboardHeader } from '@/components/dashboard/dashboard-header';
|
||||
import { useTranslations } from 'next-intl';
|
||||
|
||||
export default function AIVideoPage() {
|
||||
const t = useTranslations('Dashboard.sidebar.ai');
|
||||
|
||||
const breadcrumbs = [
|
||||
{
|
||||
label: t('title'),
|
||||
isCurrentPage: false,
|
||||
},
|
||||
{
|
||||
label: t('items.video.title'),
|
||||
isCurrentPage: true,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
<DashboardHeader breadcrumbs={breadcrumbs} />
|
||||
|
||||
<div className="px-4 lg:px-6 py-16">
|
||||
<div className="max-w-5xl mx-auto space-y-10">
|
||||
<div>
|
||||
<h1 className="text-3xl font-bold tracking-tight">
|
||||
{t('items.video.title')}
|
||||
</h1>
|
||||
<p className="text-muted-foreground mt-2">
|
||||
{t('items.video.description')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ export default function DashboardPage() {
|
||||
|
||||
const breadcrumbs = [
|
||||
{
|
||||
label: t('Dashboard.sidebar.dashboard.title'),
|
||||
label: t('Dashboard.dashboard.title'),
|
||||
isCurrentPage: true,
|
||||
},
|
||||
];
|
||||
|
@ -8,7 +8,7 @@ interface BillingLayoutProps {
|
||||
export default async function BillingLayout({
|
||||
children,
|
||||
}: BillingLayoutProps) {
|
||||
const t = await getTranslations('Dashboard.sidebar.settings');
|
||||
const t = await getTranslations('Dashboard.settings');
|
||||
|
||||
const breadcrumbs = [
|
||||
{
|
||||
|
@ -8,7 +8,7 @@ interface NotificationsLayoutProps {
|
||||
export default async function NotificationsLayout({
|
||||
children,
|
||||
}: NotificationsLayoutProps) {
|
||||
const t = await getTranslations('Dashboard.sidebar.settings');
|
||||
const t = await getTranslations('Dashboard.settings');
|
||||
|
||||
const breadcrumbs = [
|
||||
{
|
||||
|
@ -8,7 +8,7 @@ interface ProfileLayoutProps {
|
||||
export default async function ProfileLayout({
|
||||
children,
|
||||
}: ProfileLayoutProps) {
|
||||
const t = await getTranslations('Dashboard.sidebar.settings');
|
||||
const t = await getTranslations('Dashboard.settings');
|
||||
|
||||
const breadcrumbs = [
|
||||
{
|
||||
|
@ -8,7 +8,7 @@ interface SecurityLayoutProps {
|
||||
export default async function SecurityLayout({
|
||||
children,
|
||||
}: SecurityLayoutProps) {
|
||||
const t = await getTranslations('Dashboard.sidebar.settings');
|
||||
const t = await getTranslations('Dashboard.settings');
|
||||
|
||||
const breadcrumbs = [
|
||||
{
|
||||
|
@ -12,7 +12,7 @@ import { SparklesIcon } from "lucide-react";
|
||||
import { useTranslations } from "next-intl";
|
||||
|
||||
export function SidebarUpgradeCard() {
|
||||
const t = useTranslations('Dashboard.sidebar.upgrade');
|
||||
const t = useTranslations('Dashboard.upgrade');
|
||||
|
||||
return (
|
||||
<Card className="shadow-none">
|
||||
|
@ -31,7 +31,7 @@ export function CustomerPortalButton({
|
||||
className,
|
||||
children,
|
||||
}: CustomerPortalButtonProps) {
|
||||
const t = useTranslations('Dashboard.sidebar.settings.items.billing.CustomerPortalButton');
|
||||
const t = useTranslations('Dashboard.settings.items.billing.CustomerPortalButton');
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
const handleClick = async () => {
|
||||
|
@ -16,7 +16,7 @@ import { useTranslations } from 'next-intl';
|
||||
import { useEffect, useMemo, useState } from 'react';
|
||||
|
||||
export default function BillingCard() {
|
||||
const t = useTranslations('Dashboard.sidebar.settings.items.billing');
|
||||
const t = useTranslations('Dashboard.settings.items.billing');
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [error, setError] = useState<string | undefined>('');
|
||||
const [subscription, setSubscription] = useState<Subscription | null>(null);
|
||||
|
@ -40,7 +40,7 @@ interface NewsletterFormCardProps {
|
||||
* Allows users to toggle their newsletter subscription status
|
||||
*/
|
||||
export function NewsletterFormCard({ className }: NewsletterFormCardProps) {
|
||||
const t = useTranslations('Dashboard.sidebar.settings.items.notification');
|
||||
const t = useTranslations('Dashboard.settings.items.notification');
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [error, setError] = useState<string | undefined>('');
|
||||
const [isSubscriptionChecked, setIsSubscriptionChecked] = useState(false);
|
||||
|
@ -27,7 +27,7 @@ interface UpdateAvatarCardProps {
|
||||
* Update the user's avatar
|
||||
*/
|
||||
export function UpdateAvatarCard({ className }: UpdateAvatarCardProps) {
|
||||
const t = useTranslations('Dashboard.sidebar.settings.items.profile');
|
||||
const t = useTranslations('Dashboard.settings.items.profile');
|
||||
const [isUploading, setIsUploading] = useState(false);
|
||||
const [error, setError] = useState<string | undefined>('');
|
||||
const { data: session, refetch } = authClient.useSession();
|
||||
|
@ -35,7 +35,7 @@ interface UpdateNameCardProps {
|
||||
* update user name
|
||||
*/
|
||||
export function UpdateNameCard({ className }: UpdateNameCardProps) {
|
||||
const t = useTranslations('Dashboard.sidebar.settings.items.profile');
|
||||
const t = useTranslations('Dashboard.settings.items.profile');
|
||||
const [isSaving, setIsSaving] = useState(false);
|
||||
const [error, setError] = useState<string | undefined>('');
|
||||
const { data: session, refetch } = authClient.useSession();
|
||||
|
@ -32,7 +32,7 @@ import { toast } from 'sonner';
|
||||
* It includes a confirmation dialog to prevent accidental deletions.
|
||||
*/
|
||||
export function DeleteAccountCard() {
|
||||
const t = useTranslations('Dashboard.sidebar.settings.items.security.deleteAccount');
|
||||
const t = useTranslations('Dashboard.settings.items.security.deleteAccount');
|
||||
const [isDeleting, setIsDeleting] = useState(false);
|
||||
const [showConfirmation, setShowConfirmation] = useState(false);
|
||||
const [error, setError] = useState<string | undefined>('');
|
||||
|
@ -72,7 +72,7 @@ export function PasswordCardWrapper() {
|
||||
}
|
||||
|
||||
function PasswordSkeletonCard() {
|
||||
const t = useTranslations('Dashboard.sidebar.settings.items.security.updatePassword');
|
||||
const t = useTranslations('Dashboard.settings.items.security.updatePassword');
|
||||
return (
|
||||
<Card className={cn("w-full max-w-lg md:max-w-xl overflow-hidden pt-6 pb-6 flex flex-col")}>
|
||||
<CardHeader>
|
||||
|
@ -37,7 +37,7 @@ interface ResetPasswordCardProps {
|
||||
* This effectively adds a credential provider to their account, enabling email/password login.
|
||||
*/
|
||||
export function ResetPasswordCard({ className }: ResetPasswordCardProps) {
|
||||
const t = useTranslations('Dashboard.sidebar.settings.items.security.resetPassword');
|
||||
const t = useTranslations('Dashboard.settings.items.security.resetPassword');
|
||||
const router = useLocaleRouter();
|
||||
const { data: session } = authClient.useSession();
|
||||
|
||||
|
@ -46,7 +46,7 @@ interface UpdatePasswordCardProps {
|
||||
* @see https://www.better-auth.com/docs/authentication/email-password#update-password
|
||||
*/
|
||||
export function UpdatePasswordCard({ className }: UpdatePasswordCardProps) {
|
||||
const t = useTranslations('Dashboard.sidebar.settings.items.security.updatePassword');
|
||||
const t = useTranslations('Dashboard.settings.items.security.updatePassword');
|
||||
const [isSaving, setIsSaving] = useState(false);
|
||||
const [showCurrentPassword, setShowCurrentPassword] = useState(false);
|
||||
const [showNewPassword, setShowNewPassword] = useState(false);
|
||||
|
@ -439,35 +439,35 @@ export function getSidebarLinks(): NestedMenuItem[] {
|
||||
|
||||
return [
|
||||
{
|
||||
title: t('Dashboard.sidebar.dashboard.title'),
|
||||
title: t('Dashboard.dashboard.title'),
|
||||
icon: <LayoutDashboardIcon className="site-4 shrink-0" />,
|
||||
href: Routes.Dashboard,
|
||||
external: false,
|
||||
},
|
||||
{
|
||||
title: t('Dashboard.sidebar.settings.title'),
|
||||
title: t('Dashboard.settings.title'),
|
||||
icon: <Settings2Icon className="site-4 shrink-0" />,
|
||||
items: [
|
||||
{
|
||||
title: t('Dashboard.sidebar.settings.items.profile.title'),
|
||||
title: t('Dashboard.settings.items.profile.title'),
|
||||
icon: <CircleUserRoundIcon className="site-4 shrink-0" />,
|
||||
href: Routes.SettingsProfile,
|
||||
external: false,
|
||||
},
|
||||
{
|
||||
title: t('Dashboard.sidebar.settings.items.billing.title'),
|
||||
title: t('Dashboard.settings.items.billing.title'),
|
||||
icon: <CreditCardIcon className="site-4 shrink-0" />,
|
||||
href: Routes.SettingsBilling,
|
||||
external: false,
|
||||
},
|
||||
{
|
||||
title: t('Dashboard.sidebar.settings.items.security.title'),
|
||||
title: t('Dashboard.settings.items.security.title'),
|
||||
icon: <LockKeyholeIcon className="site-4 shrink-0" />,
|
||||
href: Routes.SettingsSecurity,
|
||||
external: false,
|
||||
},
|
||||
{
|
||||
title: t('Dashboard.sidebar.settings.items.notification.title'),
|
||||
title: t('Dashboard.settings.items.notification.title'),
|
||||
icon: <BellIcon className="site-4 shrink-0" />,
|
||||
href: Routes.SettingsNotifications,
|
||||
external: false,
|
||||
|
Loading…
Reference in New Issue
Block a user