fix:更新协议隐私问题
This commit is contained in:
@@ -7,7 +7,13 @@ from fastapi.responses import HTMLResponse
|
||||
from pydantic import BaseModel, HttpUrl
|
||||
|
||||
from app.core.config import get_settings
|
||||
from app.legal_docs import PRIVACY_POLICY_MD, TERMS_OF_USE_MD, choose_content_by_lang, render_as_simple_html
|
||||
from app.legal_docs import (
|
||||
PRIVACY_POLICY_MD,
|
||||
TERMS_OF_USE_MD,
|
||||
choose_content_by_lang,
|
||||
render_as_simple_html,
|
||||
split_bilingual_markdown,
|
||||
)
|
||||
|
||||
|
||||
router = APIRouter(prefix="/v1/legal", tags=["legal"])
|
||||
@@ -64,6 +70,7 @@ Dear Mama|技術支援
|
||||
|
||||
# 当前多语言仅支持 EN / TC(繁体)
|
||||
ResolvedLang = Literal["en", "tc"]
|
||||
BILINGUAL_CONTENT_LANGUAGE = "en, zh-Hant"
|
||||
|
||||
|
||||
class LegalLinksResponse(BaseModel):
|
||||
@@ -132,6 +139,18 @@ def _normalize_internal_url(request: Request, url: str, internal_path: str) -> s
|
||||
return _join_base_url(str(request.base_url), internal_path)
|
||||
|
||||
|
||||
def _build_bilingual_content(text: str) -> str:
|
||||
"""
|
||||
固定输出双语协议内容:EN 在前,TC 在后。
|
||||
若缺少 TC,则仅返回 EN。
|
||||
"""
|
||||
|
||||
en, tc = split_bilingual_markdown(text)
|
||||
if not tc:
|
||||
return en
|
||||
return f"{en}\n\n---\n{tc}"
|
||||
|
||||
|
||||
@router.get("/links", response_model=LegalLinksResponse)
|
||||
async def get_legal_links(request: Request) -> LegalLinksResponse:
|
||||
"""
|
||||
@@ -156,11 +175,18 @@ async def get_privacy_policy(request: Request) -> HTMLResponse:
|
||||
"""
|
||||
|
||||
accept_language = request.headers.get("accept-language")
|
||||
lang = _resolve_lang(accept_language)
|
||||
content, resolved = choose_content_by_lang(PRIVACY_POLICY_MD, lang)
|
||||
title = "Dear Mama | Privacy Policy" if resolved == "en" else "Dear Mama|隱私權政策"
|
||||
page = render_as_simple_html(title=title, content=content)
|
||||
return HTMLResponse(content=page, headers={"Content-Language": "en" if resolved == "en" else "zh-Hant"})
|
||||
if accept_language:
|
||||
lang = _resolve_lang(accept_language)
|
||||
content, resolved = choose_content_by_lang(PRIVACY_POLICY_MD, lang)
|
||||
title = "Dear Mama | Privacy Policy" if resolved == "en" else "Dear Mama|隱私權政策"
|
||||
html_lang = "en" if resolved == "en" else "zh-Hant"
|
||||
page = render_as_simple_html(title=title, content=content, html_lang=html_lang)
|
||||
return HTMLResponse(content=page, headers={"Content-Language": html_lang})
|
||||
|
||||
content = _build_bilingual_content(PRIVACY_POLICY_MD)
|
||||
title = "Dear Mama | Privacy Policy / 隱私權政策"
|
||||
page = render_as_simple_html(title=title, content=content, html_lang="en")
|
||||
return HTMLResponse(content=page, headers={"Content-Language": BILINGUAL_CONTENT_LANGUAGE})
|
||||
|
||||
|
||||
@router.get("/terms", response_class=HTMLResponse)
|
||||
@@ -170,11 +196,18 @@ async def get_terms_of_use(request: Request) -> HTMLResponse:
|
||||
"""
|
||||
|
||||
accept_language = request.headers.get("accept-language")
|
||||
lang = _resolve_lang(accept_language)
|
||||
content, resolved = choose_content_by_lang(TERMS_OF_USE_MD, lang)
|
||||
title = "Dear Mama – Terms of Use" if resolved == "en" else "Dear Mama 使用條款"
|
||||
page = render_as_simple_html(title=title, content=content)
|
||||
return HTMLResponse(content=page, headers={"Content-Language": "en" if resolved == "en" else "zh-Hant"})
|
||||
if accept_language:
|
||||
lang = _resolve_lang(accept_language)
|
||||
content, resolved = choose_content_by_lang(TERMS_OF_USE_MD, lang)
|
||||
title = "Dear Mama – Terms of Use" if resolved == "en" else "Dear Mama 使用條款"
|
||||
html_lang = "en" if resolved == "en" else "zh-Hant"
|
||||
page = render_as_simple_html(title=title, content=content, html_lang=html_lang)
|
||||
return HTMLResponse(content=page, headers={"Content-Language": html_lang})
|
||||
|
||||
content = _build_bilingual_content(TERMS_OF_USE_MD)
|
||||
title = "Dear Mama – Terms of Use / 使用條款"
|
||||
page = render_as_simple_html(title=title, content=content, html_lang="en")
|
||||
return HTMLResponse(content=page, headers={"Content-Language": BILINGUAL_CONTENT_LANGUAGE})
|
||||
|
||||
|
||||
@router.get("/support", response_class=HTMLResponse)
|
||||
@@ -184,9 +217,16 @@ async def get_support_page(request: Request) -> HTMLResponse:
|
||||
"""
|
||||
|
||||
accept_language = request.headers.get("accept-language")
|
||||
lang = _resolve_lang(accept_language)
|
||||
content, resolved = choose_content_by_lang(SUPPORT_MD, lang)
|
||||
title = "Dear Mama | Technical Support" if resolved == "en" else "Dear Mama|技術支援"
|
||||
page = render_as_simple_html(title=title, content=content)
|
||||
return HTMLResponse(content=page, headers={"Content-Language": "en" if resolved == "en" else "zh-Hant"})
|
||||
if accept_language:
|
||||
lang = _resolve_lang(accept_language)
|
||||
content, resolved = choose_content_by_lang(SUPPORT_MD, lang)
|
||||
title = "Dear Mama | Technical Support" if resolved == "en" else "Dear Mama|技術支援"
|
||||
html_lang = "en" if resolved == "en" else "zh-Hant"
|
||||
page = render_as_simple_html(title=title, content=content, html_lang=html_lang)
|
||||
return HTMLResponse(content=page, headers={"Content-Language": html_lang})
|
||||
|
||||
content = _build_bilingual_content(SUPPORT_MD)
|
||||
title = "Dear Mama | Technical Support / 技術支援"
|
||||
page = render_as_simple_html(title=title, content=content, html_lang="en")
|
||||
return HTMLResponse(content=page, headers={"Content-Language": BILINGUAL_CONTENT_LANGUAGE})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user