feat(showcase): add temporary language switcher for visitors with cookie persistence

This commit is contained in:
2026-07-07 09:57:20 +08:00
parent 02269417a9
commit a619b919be
3 changed files with 33 additions and 2 deletions

View File

@@ -815,6 +815,16 @@ def public_showcase(request: Request, username: str, db: Session = Depends(get_d
user = db.query(User).filter(User.username == username).first()
if not user:
return HTMLResponse("用户不存在", status_code=404)
# Language: query param > cookie > owner's default
from app.i18n import get_languages
_avail = get_languages()
visitor_lang = request.query_params.get("lang")
if not visitor_lang or visitor_lang not in _avail:
visitor_lang = request.cookies.get("showcase_lang")
if not visitor_lang or visitor_lang not in _avail:
visitor_lang = user.language
profiles = db.query(Profile).filter(Profile.user_id == user.id, Profile.showcase_enabled == True).all()
sent_all, received_all, profile_groups = [], [], []
for p in profiles:
@@ -837,11 +847,13 @@ def public_showcase(request: Request, username: str, db: Session = Depends(get_d
profile_groups.append({"profile": p, "sent": p_sent, "received": p_received})
sent_all.sort(key=lambda c: c.send_time or c.created_at, reverse=True)
received_all.sort(key=lambda c: c.receive_time or c.created_at, reverse=True)
return templates.TemplateResponse("showcase.html", {
resp = 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,
"lang": visitor_lang, "available_languages": _avail,
})
resp.set_cookie("showcase_lang", visitor_lang, max_age=365 * 24 * 3600, httponly=True, samesite="lax")
return resp
# ---------- API Keys ----------