- 新增 internal/i18n 包:以原始中文字符串为 key 的翻译目录(zh 恒等, en 兜底,ja 缺译回退 en),t/tf 模板函数与 Accept-Language 解析 (按 q 值排序,兜底英语) - User 模型新增 language 字段(auto|en|zh|ja,默认 auto), AutoMigrate 自动加列;UserStore 新增 UpdateLanguage - 语言解析:登录用户按偏好(auto 时取浏览器 Accept-Language), 登录/封禁页按浏览器语言;所有 c.HTML 渲染注入 Lang 模板数据 - 全部页面模板(用户页 + 管理后台 12 页)接入翻译:导航、文件夹、 邮件列表/阅读/写信、设置、登录、封禁页、表单、表格、JS 确认框等; html lang 属性随语言切换;日期函数(shortDate/time12/time12m) 与 folderLabel 改为语言感知(上午/下午 vs AM/PM vs 午前/午後) - 设置页新增「界面语言」选择(自动/English/中文/日本語), /settings 表单支持单独提交语言偏好;管理后台用户表单可预设语言 - 封禁原因等入库中文文案在展示时经 t 翻译(未知 key 原样回退) - 测试:i18n 单测(解析/回退/译文)、render 测试补 Lang 数据、 时间格式化测试适配新签名;全量 go test 通过
59 lines
2.7 KiB
HTML
59 lines
2.7 KiB
HTML
{{define "login"}}
|
|
<!DOCTYPE html>
|
|
<html lang="{{htmlLang .Lang}}">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
|
<title>{{t .Lang "登录"}} - MailGo {{t .Lang "邮箱"}}</title>
|
|
{{template "styles" .}}
|
|
</head>
|
|
<body class="login-page">
|
|
<div class="login-card">
|
|
<div class="login-logo">
|
|
<span class="logo-icon" style="width:44px;height:44px;font-size:22px;border-radius:12px;">✉</span>
|
|
<span style="font-size:26px;font-weight:700;color:var(--primary);">MailGo<em style="font-style:normal;font-weight:400;font-size:15px;color:var(--text-2);margin-left:4px;">{{t .Lang "邮箱"}}</em></span>
|
|
</div>
|
|
<div class="login-sub">{{t .Lang "登录您的邮箱账户"}}</div>
|
|
|
|
{{if .error}}<div class="alert alert-error">{{.error}}</div>{{end}}
|
|
|
|
<form method="POST" action="/login">
|
|
<div class="form-group">
|
|
<label>{{t .Lang "邮箱地址"}}</label>
|
|
<input type="email" name="email" required autofocus placeholder="user@example.com" style="padding:11px 14px;border-radius:8px;">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>{{t .Lang "密码"}}</label>
|
|
<input type="password" name="password" required placeholder="{{t .Lang "请输入密码"}}" style="padding:11px 14px;border-radius:8px;">
|
|
</div>
|
|
<button type="submit" class="btn btn-primary" style="width:100%;padding:11px 16px;font-size:15px;border-radius:8px;">{{t .Lang "登 录"}}</button>
|
|
</form>
|
|
|
|
{{if or .oauth2Enabled .ldapEnabled}}
|
|
<div class="divider">{{t .Lang "或"}}</div>
|
|
{{end}}
|
|
|
|
{{if .ldapEnabled}}
|
|
<form method="POST" action="/login/ldap" style="margin-bottom:10px;">
|
|
<div class="form-group">
|
|
<label>{{t .Lang "LDAP 用户名"}}</label>
|
|
<input type="text" name="username" placeholder="{{t .Lang "LDAP 用户名"}}">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>{{t .Lang "LDAP 密码"}}</label>
|
|
<input type="password" name="password" placeholder="{{t .Lang "LDAP 密码"}}">
|
|
</div>
|
|
<button type="submit" class="btn" style="width:100%;background:#7b5cd6;color:#fff;">{{t .Lang "LDAP 登录"}}</button>
|
|
</form>
|
|
{{end}}
|
|
|
|
{{if .oauth2Enabled}}
|
|
<a href="/auth/oauth2" class="btn btn-primary" style="width:100%;text-align:center;display:block;margin-top:4px;">
|
|
{{if eq .oauth2Provider "google"}}Google{{else if eq .oauth2Provider "github"}}GitHub{{else}}OAuth2{{end}} {{t .Lang "登录"}}
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
</body>
|
|
</html>
|
|
{{end}}
|