@@ -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| 隱私權政策 "
pag e = 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 )
titl e = " 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 使用條款 "
pag e = 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 )
titl e = " 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| 技術支援 "
pag e = 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 )
titl e = " 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 } )