diff --git a/ui/langs.json b/ui/langs.json index 8bcf1e5..ccb71cd 100644 --- a/ui/langs.json +++ b/ui/langs.json @@ -1,350 +1,354 @@ { "en-US": { + "auth.account": "Username/Email", + "auth.back_to_login": "Back to Login", + "auth.bind_account": "Bind Account", + "auth.bind_exist_desc": "Bind your {provider} to an existing account", + "auth.bind_existing": "Bind Existing", + "auth.bind_login_tip": "To keep connected with us please login with your personal info", + "auth.bind_new_desc": "Create a new account to bind with {provider}", + "auth.bind_register_tip": "Enter your personal details and start journey with us", + "auth.bind_success": "Binding successful", + "auth.change_password": "Change Password", + "auth.code_login": "Code", + "auth.code_sent": "Code sent", + "auth.confirm_password": "Confirm Password", + "auth.create_account": "Create Account", + "auth.create_new": "Create New", "auth.email": "Email", + "auth.email_disabled": "Email login is disabled", + "auth.email_or_phone": "Email or Phone", + "auth.fill_all_fields": "Please fill in all required fields", + "auth.fill_required": "Please fill in all required fields", + "auth.forgot_password": "Forgot password?", + "auth.have_account": "Already have an account?", + "auth.hello_friend": "Hello, Friend!", + "auth.keep_connected": "Keep connected with your personal info", + "auth.linked_accounts": "Linked Accounts", "auth.login": "Login", + "auth.login_bind": "Login \u0026 Bind", + "auth.login_failed": "Login failed", + "auth.login_success": "Login successful", "auth.logout": "Logout", + "auth.new_password": "New Password", + "auth.no_account": "Don't have an account?", + "auth.oauth_failed": "OAuth login failed", + "auth.old_password": "Current Password", "auth.password": "Password", + "auth.password_changed": "Password changed successfully", + "auth.password_too_short": "Password must be at least 8 characters", + "auth.passwords_not_match": "Passwords do not match", + "auth.phone_placeholder": "Enter your phone number", "auth.register": "Register", + "auth.register_failed": "Registration failed", + "auth.register_success": "Registration successful", + "auth.security": "Security", + "auth.sign_up_bind": "Sign Up \u0026 Bind", + "auth.sms_disabled": "SMS login is disabled", + "auth.start_journey": "Enter your personal details and start your journey", + "auth.target_and_code_required": "Email/Phone and Code are required", + "auth.target_required": "Email or Phone is required", + "auth.unbind_confirm": "Are you sure you want to unbind this account?", + "auth.use_account": "or use your account", + "auth.use_info_register": "or use your info to register", "auth.username": "Username", - "auth.confirm_password": "Confirm Password", + "auth.username_login": "Username", "auth.username_or_email": "Username or Email", - "auth.email_or_phone": "Email or Phone", - "auth.phone": "Phone Number", - "auth.phone_placeholder": "Enter your phone number", + "auth.username_required": "Username is required", + "auth.username_too_short": "Username must be at least 3 characters", "auth.verification_code": "Verification Code", - "auth.send_code": "Send Code", - "auth.code_sent": "Code sent", - "auth.code_login_not_supported": "Code login is not supported yet", - "auth.target_required": "Email or Phone is required", - "auth.target_and_code_required": "Email/Phone and Code are required", - "auth.email_disabled": "Email login is disabled", - "auth.sms_disabled": "SMS login is disabled", - "auth.username_login": "Username", - "auth.code_login": "Code", - "auth.create_account": "Create Account", - "auth.use_info_register": "or use your info to register", - "auth.use_account": "or use your account", "auth.welcome_back": "Welcome Back!", - "auth.keep_connected": "Keep connected with your personal info", - "auth.hello_friend": "Hello, Friend!", - "auth.start_journey": "Enter your personal details and start your journey", - "auth.have_account": "Already have an account?", - "auth.no_account": "Don't have an account?", - "auth.forgot_password": "Forgot password?", - "auth.fill_all_fields": "Please fill in all required fields", - "auth.username_too_short": "Username must be at least 3 characters", - "auth.password_too_short": "Password must be at least 8 characters", - "auth.passwords_not_match": "Passwords do not match", - "auth.login_success": "Login successful", - "auth.login_failed": "Login failed", - "auth.register_success": "Registration successful", - "auth.register_failed": "Registration failed", - "auth.invalid_response": "Invalid server response", - "auth.oauth_not_ready": "{provider} login is not ready yet", - "auth.logging_in": "Logging in...", - "auth.back_to_login": "Back to Login", - "auth.bind_account": "Bind Account", - "auth.bind_new_desc": "Create a new account to bind with {provider}", - "auth.sign_up_bind": "Sign Up & Bind", - "auth.bind_existing": "Bind Existing", - "auth.bind_exist_desc": "Bind your {provider} to an existing account", - "auth.account": "Username/Email", - "auth.login_bind": "Login & Bind", - "auth.bind_login_tip": "To keep connected with us please login with your personal info", - "auth.bind_register_tip": "Enter your personal details and start journey with us", - "auth.bind_success": "Binding successful", - "auth.fill_required": "Please fill in all required fields", - "auth.username_required": "Username is required", - "common.processing": "Processing...", "common.actions": "Actions", - "common.back": "Back", + "common.bind": "Bind", "common.cancel": "Cancel", - "common.confirm": "Confirm", "common.create": "Create", "common.delete": "Delete", "common.edit": "Edit", "common.forbidden": "Forbidden", - "common.loading": "Loading...", + "common.id": "ID", "common.not_found": "Not Found", + "common.processing": "Processing...", + "common.reset": "Reset", "common.save": "Save", + "common.save_success": "Saved successfully", "common.saving": "Saving...", - "common.reset": "Reset", - "common.status": "Status", + "common.success": "Success", + "common.unbind": "Unbind", "nav.dashboard": "Dashboard", "nav.home": "Home", "nav.oauth": "OAuth Apps", + "nav.oauth_providers": "Identity Providers", + "nav.profile": "Profile", "nav.roles": "Roles", "nav.settings": "Settings", - "nav.oauth_providers": "Identity Providers", - "oauth.provider.code": "Code", - "oauth.provider.name": "Name", + "nav.users": "Users", "oauth.provider.client_id": "Client ID", "oauth.provider.client_secret": "Client Secret", - "oauth.provider.redirect_uri": "Redirect URI", - "oauth.provider.auth_url": "Auth URL", - "oauth.provider.token_url": "Token URL", - "oauth.provider.user_info_url": "User Info URL", - "oauth.provider.scope": "Scopes", - "oauth.provider.enabled": "Enabled", + "oauth.provider.code": "Code", "oauth.provider.create": "Add Provider", "oauth.provider.edit": "Edit Provider", - "oauth.provider.delete_confirm": "Delete this provider?", - "oauth.provider.templates": "Templates", - "nav.profile": "Profile", - "nav.users": "Users", - "user.email": "Email", - "user.profile": "User Profile", - "user.role": "Role", - "user.username": "Username", - "role.name": "Role Name", + "oauth.provider.enabled": "Enabled", + "oauth.provider.name": "Name", + "oauth.provider.redirect_uri": "Redirect URI", "role.code": "Role Code", - "role.description": "Description", "role.create": "Create Role", - "role.edit": "Edit Role", "role.delete_confirm": "Are you sure you want to delete this role?", + "role.description": "Description", + "role.edit": "Edit Role", + "role.name": "Role Name", "role.search_placeholder": "Search roles...", - "settings.category.app": "Application", - "settings.category.auth": "Authentication", - "settings.category.security": "Security", - "settings.category.code": "Verification Code", - "settings.category.email": "Email", - "settings.category.sms": "SMS", - "settings.app.name": "App Name", - "settings.app.name_desc": "Display name of the application", "settings.app.id": "App ID", "settings.app.id_desc": "Unique identifier for the application", - "settings.auth.reg_require_email": "Require Email for Registration", - "settings.auth.reg_require_email_desc": "Make email mandatory during registration", - "settings.auth.reg_require_phone": "Require Phone for Registration", - "settings.auth.reg_require_phone_desc": "Make phone number mandatory during registration", + "settings.app.name": "App Name", + "settings.app.name_desc": "Display name of the application", "settings.auth.login_methods": "Login Methods", "settings.auth.login_methods_desc": "Available login methods (JSON array)", "settings.auth.password_fields": "Password Login Fields", "settings.auth.password_fields_desc": "Fields allowed for password login", - "settings.security.captcha_enabled": "Enable Captcha", - "settings.security.captcha_enabled_desc": "Show captcha verification on login", - "settings.security.max_login_attempts": "Max Login Attempts", - "settings.security.max_login_attempts_desc": "Maximum failed login attempts before lockout", - "settings.security.bcrypt_cost": "Bcrypt Cost", - "settings.security.bcrypt_cost_desc": "Password hashing strength (4-31)", + "settings.auth.reg_require_email": "Require Email for Registration", + "settings.auth.reg_require_email_desc": "Make email mandatory during registration", + "settings.auth.reg_require_phone": "Require Phone for Registration", + "settings.auth.reg_require_phone_desc": "Make phone number mandatory during registration", + "settings.category.app": "Application", + "settings.category.auth": "Authentication", + "settings.category.code": "Verification Code", + "settings.category.email": "Email", + "settings.category.security": "Security", + "settings.category.sms": "SMS", "settings.code.expiry": "Code Expiry", "settings.code.expiry_desc": "Verification code validity period (minutes)", "settings.code.length": "Code Length", "settings.code.length_desc": "Number of digits in verification code", "settings.code.max_attempt": "Max Attempts", "settings.code.max_attempt_desc": "Maximum verification code attempts", - "settings.code.send_interval": "Send Interval", - "settings.code.send_interval_desc": "Minimum seconds between code sends", "settings.code.max_daily_count": "Max Daily Count", "settings.code.max_daily_count_desc": "Maximum daily send count (0 to disable, -1 for unlimited)", + "settings.code.send_interval": "Send Interval", + "settings.code.send_interval_desc": "Minimum seconds between code sends", "settings.email.enabled": "Enable Email", "settings.email.enabled_desc": "Enable email service for notifications", + "settings.email.from": "From Email", + "settings.email.from_desc": "Sender email address", + "settings.email.from_name": "From Name", + "settings.email.from_name_desc": "Sender display name", "settings.email.provider": "Email Provider", "settings.email.provider_desc": "Email service provider", "settings.email.smtp_host": "SMTP Host", "settings.email.smtp_host_desc": "SMTP server hostname", + "settings.email.smtp_pass": "SMTP Password", + "settings.email.smtp_pass_desc": "SMTP authentication password", "settings.email.smtp_port": "SMTP Port", "settings.email.smtp_port_desc": "SMTP server port", "settings.email.smtp_user": "SMTP Username", "settings.email.smtp_user_desc": "SMTP authentication username", - "settings.email.smtp_pass": "SMTP Password", - "settings.email.smtp_pass_desc": "SMTP authentication password", - "settings.email.from": "From Email", - "settings.email.from_desc": "Sender email address", - "settings.email.from_name": "From Name", - "settings.email.from_name_desc": "Sender display name", + "settings.load_failed": "Failed to load settings", + "settings.no_changes": "No changes to save", + "settings.reset_done": "Settings reset to original values", + "settings.save_failed": "Failed to save settings", + "settings.save_success": "Settings saved successfully", + "settings.security.bcrypt_cost": "Bcrypt Cost", + "settings.security.bcrypt_cost_desc": "Password hashing strength (4-31)", + "settings.security.captcha_enabled": "Enable Captcha", + "settings.security.captcha_enabled_desc": "Show captcha verification on login", + "settings.security.max_login_attempts": "Max Login Attempts", + "settings.security.max_login_attempts_desc": "Maximum failed login attempts before lockout", + "settings.sms.access_key": "Access Key", + "settings.sms.access_key_desc": "API access key ID", + "settings.sms.access_secret": "Access Secret", + "settings.sms.access_secret_desc": "API access key secret", "settings.sms.enabled": "Enable SMS", "settings.sms.enabled_desc": "Enable SMS service for verification codes", "settings.sms.provider": "SMS Provider", - "settings.sms.provider_desc": "SMS service provider", "settings.sms.provider_aliyun": "Alibaba Cloud", + "settings.sms.provider_desc": "SMS service provider", "settings.sms.provider_tencent": "Tencent Cloud", - "settings.sms.access_key": "Access Key", - "settings.sms.access_key_desc": "API access key ID", - "settings.sms.access_secret": "Access Secret", - "settings.sms.access_secret_desc": "API access key secret", "settings.sms.sign_name": "SMS Sign Name", "settings.sms.sign_name_desc": "Registered SMS signature", "settings.sms.template_code": "Template Code", "settings.sms.template_code_desc": "Verification code template ID", - "settings.load_failed": "Failed to load settings", - "settings.save_success": "Settings saved successfully", - "settings.save_failed": "Failed to save settings", - "settings.reset_done": "Settings reset to original values", - "settings.no_changes": "No changes to save" + "user.avatar_url": "Avatar URL", + "user.create": "Create User", + "user.edit": "Edit User", + "user.email": "Email", + "user.info": "Basic Information", + "user.nickname": "Nickname", + "user.phone": "Phone", + "user.profile": "User Profile", + "user.search_placeholder": "Search users...", + "user.username": "Username" }, "zh-CN": { - "auth.email": "邮箱", - "auth.login": "登录", - "auth.logout": "登出", - "auth.password": "密码", - "auth.register": "注册", - "auth.username": "用户名", - "auth.confirm_password": "确认密码", - "auth.username_or_email": "用户名或邮箱", - "auth.email_or_phone": "邮箱或手机号", - "auth.phone": "手机号", - "auth.phone_placeholder": "请输入手机号", - "auth.verification_code": "验证码", - "auth.send_code": "发送验证码", - "auth.code_sent": "验证码已发送", - "auth.code_login_not_supported": "验证码登录暂不支持", - "auth.target_required": "请输入邮箱或手机号", - "auth.target_and_code_required": "请输入邮箱/手机号和验证码", - "auth.email_disabled": "邮箱登录未启用", - "auth.sms_disabled": "手机号登录未启用", - "auth.username_login": "用户名", + "auth.account": "用户名/邮箱", + "auth.back_to_login": "返回登录", + "auth.bind_account": "绑定账号", + "auth.bind_exist_desc": "将 {provider} 绑定到现有账号", + "auth.bind_existing": "绑定已有账号", + "auth.bind_login_tip": "请登录您的个人账号以保持连接", + "auth.bind_new_desc": "创建新账号并绑定 {provider}", + "auth.bind_register_tip": "输入您的个人信息,开启您的旅程", + "auth.bind_success": "绑定成功", + "auth.change_password": "修改密码", "auth.code_login": "验证码", + "auth.code_sent": "验证码已发送", + "auth.confirm_password": "确认密码", "auth.create_account": "创建账户", - "auth.use_info_register": "或使用您的信息进行注册", - "auth.use_account": "或使用您的账户", - "auth.welcome_back": "欢迎回来!", - "auth.keep_connected": "请使用您的个人信息登录,保持连接", - "auth.hello_friend": "你好,朋友!", - "auth.start_journey": "输入您的个人信息,开始您的旅程", + "auth.email": "邮箱", + "auth.email_disabled": "邮箱登录未启用", + "auth.email_or_phone": "邮箱或手机号", + "auth.fill_all_fields": "请填写所有必填字段", + "auth.fill_required": "请填写所有必填项", + "auth.forgot_password": "忘记密码?", "auth.have_account": "已有账户?", + "auth.hello_friend": "你好,朋友!", + "auth.keep_connected": "请使用您的个人信息登录,保持连接", + "auth.linked_accounts": "账号绑定", + "auth.login": "登录", + "auth.login_bind": "登录并绑定", + "auth.login_failed": "登录失败", + "auth.login_success": "登录成功", + "auth.logout": "登出", + "auth.new_password": "新密码", "auth.no_account": "还没有账户?", - "auth.forgot_password": "忘记密码?", - "auth.fill_all_fields": "请填写所有必填字段", - "auth.username_too_short": "用户名至少3个字符", + "auth.old_password": "当前密码", + "auth.password": "密码", + "auth.password_changed": "密码修改成功", "auth.password_too_short": "密码至少8个字符", "auth.passwords_not_match": "两次输入的密码不一致", - "auth.login_success": "登录成功", - "auth.login_failed": "登录失败", - "auth.register_success": "注册成功", + "auth.phone_placeholder": "请输入手机号", + "auth.register": "注册", "auth.register_failed": "注册失败", - "auth.invalid_response": "服务器响应异常", - "auth.oauth_not_ready": "{provider} 登录尚未就绪", - "auth.logging_in": "登录中...", - "auth.back_to_login": "返回登录", - "auth.bind_account": "绑定账号", - "auth.bind_new_desc": "创建新账号并绑定 {provider}", + "auth.register_success": "注册成功", + "auth.security": "安全设置", "auth.sign_up_bind": "注册并绑定", - "auth.bind_existing": "绑定已有账号", - "auth.bind_exist_desc": "将 {provider} 绑定到现有账号", - "auth.account": "用户名/邮箱", - "auth.login_bind": "登录并绑定", - "auth.bind_login_tip": "请登录您的个人账号以保持连接", - "auth.bind_register_tip": "输入您的个人信息,开启您的旅程", - "auth.bind_success": "绑定成功", - "auth.fill_required": "请填写所有必填项", + "auth.sms_disabled": "手机号登录未启用", + "auth.start_journey": "输入您的个人信息,开始您的旅程", + "auth.target_and_code_required": "请输入邮箱/手机号和验证码", + "auth.target_required": "请输入邮箱或手机号", + "auth.unbind_confirm": "确定要解绑该账号吗?", + "auth.use_account": "或使用您的账户", + "auth.use_info_register": "或使用您的信息进行注册", + "auth.username": "用户名", + "auth.username_login": "用户名", + "auth.username_or_email": "用户名或邮箱", "auth.username_required": "用户名必填", - "common.processing": "处理中...", + "auth.username_too_short": "用户名至少3个字符", + "auth.verification_code": "验证码", + "auth.welcome_back": "欢迎回来!", "common.actions": "操作", - "common.back": "返回", "common.cancel": "取消", - "common.confirm": "确认", "common.create": "创建", "common.delete": "删除", "common.edit": "编辑", "common.forbidden": "禁止访问", - "common.loading": "加载中...", "common.not_found": "页面未找到", + "common.processing": "处理中...", + "common.reset": "重置", "common.save": "保存", + "common.save_success": "保存成功", "common.saving": "保存中...", - "common.reset": "重置", - "common.status": "状态", + "common.success": "成功", + "common.unbind": "解绑", "nav.dashboard": "仪表盘", "nav.home": "首页", "nav.oauth": "OAuth应用", + "nav.oauth_providers": "身份源管理", + "nav.profile": "个人中心", "nav.roles": "角色管理", "nav.settings": "系统设置", - "nav.oauth_providers": "身份源管理", - "oauth.provider.code": "代码", - "oauth.provider.name": "名称", + "nav.users": "用户管理", "oauth.provider.client_id": "客户端ID", "oauth.provider.client_secret": "客户端密钥", - "oauth.provider.redirect_uri": "回调地址", - "oauth.provider.auth_url": "授权地址", - "oauth.provider.token_url": "令牌地址", - "oauth.provider.user_info_url": "用户信息地址", - "oauth.provider.scope": "权限范围", - "oauth.provider.enabled": "启用", + "oauth.provider.code": "代码", "oauth.provider.create": "添加身份源", "oauth.provider.edit": "编辑身份源", - "oauth.provider.delete_confirm": "确定删除该身份源吗?", - "oauth.provider.templates": "模板", - "nav.profile": "个人中心", - "nav.users": "用户管理", - "user.email": "邮箱", - "user.profile": "个人资料", - "user.role": "角色", - "user.username": "用户名", - "role.name": "角色名称", + "oauth.provider.enabled": "启用", + "oauth.provider.name": "名称", + "oauth.provider.redirect_uri": "回调地址", + "oauth.create": "创建", + "oauth.create_app": "创建应用", + "org.created": "组织已创建", "role.code": "角色代码", - "role.description": "描述", "role.create": "创建角色", - "role.edit": "编辑角色", "role.delete_confirm": "确定要删除该角色吗?", + "role.description": "描述", + "role.edit": "编辑角色", + "role.name": "角色名称", "role.search_placeholder": "搜索角色...", - "settings.category.app": "应用配置", - "settings.category.auth": "认证配置", - "settings.category.security": "安全配置", - "settings.category.code": "验证码配置", - "settings.category.email": "邮件配置", - "settings.category.sms": "短信配置", - "settings.app.name": "应用名称", - "settings.app.name_desc": "应用的显示名称", "settings.app.id": "应用标识", "settings.app.id_desc": "应用的唯一标识符", - "settings.auth.reg_require_email": "注册需要邮箱", - "settings.auth.reg_require_email_desc": "注册时强制要求填写邮箱", - "settings.auth.reg_require_phone": "注册需要手机号", - "settings.auth.reg_require_phone_desc": "注册时强制要求填写手机号", + "settings.app.name": "应用名称", + "settings.app.name_desc": "应用的显示名称", "settings.auth.login_methods": "登录方式", "settings.auth.login_methods_desc": "支持的登录方式(JSON数组)", "settings.auth.password_fields": "密码登录字段", "settings.auth.password_fields_desc": "密码登录支持的字段", - "settings.security.captcha_enabled": "启用验证码", - "settings.security.captcha_enabled_desc": "登录时显示验证码验证", - "settings.security.max_login_attempts": "最大登录尝试次数", - "settings.security.max_login_attempts_desc": "失败登录尝试的最大次数", - "settings.security.bcrypt_cost": "Bcrypt强度", - "settings.security.bcrypt_cost_desc": "密码哈希强度(4-31)", + "settings.auth.reg_require_email": "注册需要邮箱", + "settings.auth.reg_require_email_desc": "注册时强制要求填写邮箱", + "settings.auth.reg_require_phone": "注册需要手机号", + "settings.auth.reg_require_phone_desc": "注册时强制要求填写手机号", + "settings.category.app": "应用配置", + "settings.category.auth": "认证配置", + "settings.category.code": "验证码配置", + "settings.category.email": "邮件配置", + "settings.category.security": "安全配置", + "settings.category.sms": "短信配置", "settings.code.expiry": "验证码有效期", "settings.code.expiry_desc": "验证码有效时间(分钟)", "settings.code.length": "验证码长度", "settings.code.length_desc": "验证码的位数", "settings.code.max_attempt": "最大尝试次数", "settings.code.max_attempt_desc": "验证码最大尝试次数", - "settings.code.send_interval": "发送间隔", - "settings.code.send_interval_desc": "两次发送之间的最小间隔(秒)", "settings.code.max_daily_count": "单日最大发送次数", "settings.code.max_daily_count_desc": "单日发送验证码最大次数(0禁用,-1不限制)", + "settings.code.send_interval": "发送间隔", + "settings.code.send_interval_desc": "两次发送之间的最小间隔(秒)", "settings.email.enabled": "启用邮件", "settings.email.enabled_desc": "启用邮件服务用于通知", + "settings.email.from": "发件人邮箱", + "settings.email.from_desc": "发件人邮箱地址", + "settings.email.from_name": "发件人名称", + "settings.email.from_name_desc": "发件人显示名称", "settings.email.provider": "邮件服务商", "settings.email.provider_desc": "邮件服务提供商", "settings.email.smtp_host": "SMTP服务器", "settings.email.smtp_host_desc": "SMTP服务器地址", + "settings.email.smtp_pass": "SMTP密码", + "settings.email.smtp_pass_desc": "SMTP认证密码", "settings.email.smtp_port": "SMTP端口", "settings.email.smtp_port_desc": "SMTP服务器端口", "settings.email.smtp_user": "SMTP用户名", "settings.email.smtp_user_desc": "SMTP认证用户名", - "settings.email.smtp_pass": "SMTP密码", - "settings.email.smtp_pass_desc": "SMTP认证密码", - "settings.email.from": "发件人邮箱", - "settings.email.from_desc": "发件人邮箱地址", - "settings.email.from_name": "发件人名称", - "settings.email.from_name_desc": "发件人显示名称", + "settings.load_failed": "加载设置失败", + "settings.no_changes": "没有需要保存的更改", + "settings.reset_done": "设置已重置", + "settings.save_failed": "保存设置失败", + "settings.save_success": "设置保存成功", + "settings.security.bcrypt_cost": "Bcrypt强度", + "settings.security.bcrypt_cost_desc": "密码哈希强度(4-31)", + "settings.security.captcha_enabled": "启用验证码", + "settings.security.captcha_enabled_desc": "登录时显示验证码验证", + "settings.security.max_login_attempts": "最大登录尝试次数", + "settings.security.max_login_attempts_desc": "失败登录尝试的最大次数", + "settings.sms.access_key": "Access Key", + "settings.sms.access_key_desc": "API访问密钥ID", + "settings.sms.access_secret": "Access Secret", + "settings.sms.access_secret_desc": "API访问密钥密文", "settings.sms.enabled": "启用短信", "settings.sms.enabled_desc": "启用短信服务用于验证码", "settings.sms.provider": "短信服务商", - "settings.sms.provider_desc": "短信服务提供商", "settings.sms.provider_aliyun": "阿里云", + "settings.sms.provider_desc": "短信服务提供商", "settings.sms.provider_tencent": "腾讯云", - "settings.sms.access_key": "Access Key", - "settings.sms.access_key_desc": "API访问密钥ID", - "settings.sms.access_secret": "Access Secret", - "settings.sms.access_secret_desc": "API访问密钥密文", "settings.sms.sign_name": "短信签名", "settings.sms.sign_name_desc": "已注册的短信签名", "settings.sms.template_code": "模板代码", "settings.sms.template_code_desc": "验证码模板ID", - "settings.load_failed": "加载设置失败", - "settings.save_success": "设置保存成功", - "settings.save_failed": "保存设置失败", - "settings.reset_done": "设置已重置", - "settings.no_changes": "没有需要保存的更改" + "user.avatar_url": "头像链接", + "user.email": "邮箱", + "user.info": "基本信息", + "user.nickname": "昵称", + "user.phone": "手机号", + "user.profile": "个人资料", + "user.username": "用户名" } } \ No newline at end of file diff --git a/ui/layout/default.html b/ui/layout/default.html index d1fac62..447dc29 100644 --- a/ui/layout/default.html +++ b/ui/layout/default.html @@ -146,6 +146,7 @@ toggleCollapse = () => { collapsed = !collapsed; }; + console.log($vbase.PermAdmin("*")) diff --git a/ui/page/user/profile.html b/ui/page/user/profile.html index 374d3b5..67ec18c 100644 --- a/ui/page/user/profile.html +++ b/ui/page/user/profile.html @@ -10,12 +10,14 @@ display: flex; justify-content: center; padding-top: var(--spacing-xl); + padding-bottom: var(--spacing-xl); box-sizing: border-box; + min-height: 100vh; } .profile-container { width: 100%; - max-width: 600px; + max-width: 800px; padding: var(--spacing-xl); background: var(--bg-color-secondary); border-radius: var(--radius-lg); @@ -23,21 +25,33 @@ border: 1px solid var(--border-color); display: flex; flex-direction: column; - gap: var(--spacing-lg); + gap: var(--spacing-xl); height: fit-content; } + .section-title { + font-size: 1.25rem; + font-weight: 600; + color: var(--color-text); + margin-bottom: var(--spacing-md); + padding-bottom: var(--spacing-xs); + border-bottom: 1px solid var(--border-color); + } + .avatar-section { display: flex; align-items: center; - justify-content: center; - flex-direction: column; - gap: var(--spacing-md); + gap: var(--spacing-lg); + } + + .avatar-wrapper { + position: relative; + cursor: pointer; } .avatar { - width: 100px; - height: 100px; + width: 80px; + height: 80px; border-radius: 50%; background: linear-gradient(135deg, var(--color-primary), var(--color-secondary)); display: flex; @@ -46,45 +60,188 @@ font-size: 32px; color: var(--color-primary-text); font-weight: bold; + overflow: hidden; + } + + .avatar img { + width: 100%; + height: 100%; + object-fit: cover; + } + + .avatar-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + color: white; + opacity: 0; + transition: opacity 0.2s; + } + + .avatar-wrapper:hover .avatar-overlay { + opacity: 1; + } + + .form-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: var(--spacing-md); + } + + .form-full { + grid-column: 1 / -1; } - .form-content { + .oauth-list { display: flex; flex-direction: column; + gap: var(--spacing-sm); + } + + .oauth-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--spacing-sm); + background: var(--bg-color); + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + } + + .oauth-info { + display: flex; + align-items: center; gap: var(--spacing-md); } + + .oauth-icon { + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + font-size: 18px; + background: var(--bg-color-secondary); + border-radius: 50%; + } + + .danger-zone { + margin-top: var(--spacing-lg); + padding-top: var(--spacing-lg); + border-top: 1px solid var(--border-color); + }
-

{{ $t('user.profile') }}

+
+

{{ $t('user.profile') }}

+ + {{ $t('auth.logout') }} + +
-
-
- {{ user.username ? user.username.charAt(0).toUpperCase() : 'U' }} + +
+
{{ $t('user.info') || 'Basic Information' }}
+
+
+
+ Avatar + {{ user.nickname ? user.nickname.charAt(0).toUpperCase() : (user.username ? user.username.charAt(0).toUpperCase() : 'U') }} +
+
+ +
+
+
+
{{ user.nickname || user.username }}
+
{{ $t('common.id') }}: {{ user.id }}
+
+ +
+
+ + + + + +
+
+ + {{ $t('common.save') }} + +
+
-
- - - - - - {{ $t('common.save') }} - -
+ +
+
{{ $t('auth.security') || 'Security' }}
+
+
+ + +
+
+ + {{ $t('auth.change_password') || 'Update Password' }} + +
+
+
-
- - {{ $t('auth.logout') }} - + +
+
{{ $t('auth.linked_accounts') || 'Linked Accounts' }}
+
+
+
+
+ +
+
+
{{ provider.name }}
+
+ {{ getBindInfo(provider.code) }} +
+
+ {{ $t('auth.not_linked') }} +
+
+
+
+ + {{ $t('common.unbind') }} + + + {{ $t('common.bind') }} + +
+
+
+
- + \ No newline at end of file diff --git a/ui/vbase.js b/ui/vbase.js index de0d36a..2aede1f 100644 --- a/ui/vbase.js +++ b/ui/vbase.js @@ -105,14 +105,14 @@ class VBase { */ async oauthCallback(provider, code, state) { const data = await this.request('GET', `/api/auth/callback/${provider}?code=${code}&state=${state}`); - + // If login success directly if (data.access_token || data.token) { this.token = data.access_token || data.token; if (data.refresh_token) this.refreshToken = data.refresh_token; if (data.user) this.user = data.user; } - + return data; } @@ -135,7 +135,7 @@ class VBase { if (data.refresh_token) this.refreshToken = data.refresh_token; if (data.user) this.user = data.user; } - + return data; } @@ -158,7 +158,7 @@ class VBase { if (data.refresh_token) this.refreshToken = data.refresh_token; if (data.user) this.user = data.user; } - + return data; }