feat(i18n): add English localization with per-user language preference and navbar toggle
This commit is contained in:
@@ -22,6 +22,7 @@ from random import choice
|
||||
from string import ascii_letters, digits
|
||||
|
||||
from app.models import InviteCode, Postcard, Profile, User
|
||||
from app.i18n import t as _t
|
||||
|
||||
router = APIRouter(tags=["web"])
|
||||
templates = Jinja2Templates(directory=str(Path(__file__).resolve().parent.parent / "templates"))
|
||||
@@ -66,6 +67,13 @@ def _strftime(dt: datetime, fmt: str) -> str:
|
||||
templates.env.filters["strftime"] = _strftime
|
||||
|
||||
|
||||
def _translate_filter(key: str, lang: str = "zh") -> str:
|
||||
return _t(key, lang)
|
||||
|
||||
|
||||
templates.env.filters["t"] = _translate_filter
|
||||
|
||||
|
||||
def _redirect(url: str) -> RedirectResponse:
|
||||
return RedirectResponse(url, status_code=303)
|
||||
|
||||
@@ -353,6 +361,19 @@ def change_password(
|
||||
)
|
||||
|
||||
|
||||
@router.post("/settings/language")
|
||||
def change_language(
|
||||
request: Request,
|
||||
language: str = Form(...),
|
||||
user: User = Depends(get_current_user_web),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
if language in ("zh", "en"):
|
||||
user.language = language
|
||||
db.commit()
|
||||
return _redirect(request.headers.get("referer", "/settings"))
|
||||
|
||||
|
||||
# ---------- Auth ----------
|
||||
|
||||
@router.get("/logout")
|
||||
@@ -798,4 +819,5 @@ def public_showcase(request: Request, username: str, db: Session = Depends(get_d
|
||||
return templates.TemplateResponse("showcase.html", {
|
||||
"request": request, "profile_user": user, "mode": user.showcase_mode,
|
||||
"profile_groups": profile_groups, "sent_all": sent_all, "received_all": received_all,
|
||||
"lang": user.language,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user