feat(showcase): add temporary language switcher for visitors with cookie persistence
This commit is contained in:
@@ -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 ----------
|
||||
|
||||
Reference in New Issue
Block a user