181 lines
4.4 KiB
Python
181 lines
4.4 KiB
Python
"""Traditional Chinese localization helpers for public API payloads."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
TEAM_NAMES = {
|
|
'Argentina': '阿根廷',
|
|
'Australia': '澳洲',
|
|
'Austria': '奧地利',
|
|
'Belgium': '比利時',
|
|
'Brazil': '巴西',
|
|
'Canada': '加拿大',
|
|
'Cape Verde': '維德角',
|
|
'Colombia': '哥倫比亞',
|
|
'Croatia': '克羅埃西亞',
|
|
'Curaçao': '古拉索',
|
|
'Czech Republic': '捷克',
|
|
'DR Congo': '剛果民主共和國',
|
|
'Ecuador': '厄瓜多',
|
|
'Egypt': '埃及',
|
|
'England': '英格蘭',
|
|
'France': '法國',
|
|
'Germany': '德國',
|
|
'Ghana': '迦納',
|
|
'Iran': '伊朗',
|
|
'Iraq': '伊拉克',
|
|
'Japan': '日本',
|
|
'Jordan': '約旦',
|
|
'Mexico': '墨西哥',
|
|
'Netherlands': '荷蘭',
|
|
'New Zealand': '紐西蘭',
|
|
'Norway': '挪威',
|
|
'Panama': '巴拿馬',
|
|
'Portugal': '葡萄牙',
|
|
'Qatar': '卡達',
|
|
'Saudi Arabia': '沙烏地阿拉伯',
|
|
'Senegal': '塞內加爾',
|
|
'South Africa': '南非',
|
|
'South Korea': '南韓',
|
|
'Spain': '西班牙',
|
|
'Sweden': '瑞典',
|
|
'Tunisia': '突尼西亞',
|
|
'Türkiye': '土耳其',
|
|
'Turkey': '土耳其',
|
|
'United States': '美國',
|
|
'USA': '美國',
|
|
'Uruguay': '烏拉圭',
|
|
'Uzbekistan': '烏茲別克',
|
|
}
|
|
|
|
COUNTRIES = {
|
|
'United States': '美國',
|
|
'USA': '美國',
|
|
'Canada': '加拿大',
|
|
'Mexico': '墨西哥',
|
|
}
|
|
|
|
CITIES = {
|
|
'New York': '紐約',
|
|
'New Jersey': '紐澤西',
|
|
'Los Angeles': '洛杉磯',
|
|
'Dallas': '達拉斯',
|
|
'Houston': '休士頓',
|
|
'Kansas City': '堪薩斯城',
|
|
'Miami': '邁阿密',
|
|
'Philadelphia': '費城',
|
|
'Seattle': '西雅圖',
|
|
'Atlanta': '亞特蘭大',
|
|
'Boston': '波士頓',
|
|
'San Francisco': '舊金山',
|
|
'Toronto': '多倫多',
|
|
'Vancouver': '溫哥華',
|
|
'Mexico City': '墨西哥城',
|
|
'Guadalajara': '瓜達拉哈拉',
|
|
'Monterrey': '蒙特雷',
|
|
}
|
|
|
|
VENUES = {
|
|
'MetLife Stadium': '大都會人壽體育場',
|
|
'SoFi Stadium': 'SoFi 體育場',
|
|
'AT&T Stadium': 'AT&T 體育場',
|
|
'NRG Stadium': 'NRG 體育場',
|
|
'Hard Rock Stadium': '硬石體育場',
|
|
'Lumen Field': '流明球場',
|
|
'Mercedes-Benz Stadium': '梅賽德斯-賓士體育場',
|
|
'Lincoln Financial Field': '林肯金融球場',
|
|
'Gillette Stadium': '吉列體育場',
|
|
'Levi's Stadium': '李維斯體育場',
|
|
'BMO Field': 'BMO 球場',
|
|
'BC Place': '卑詩體育館',
|
|
'Estadio Azteca': '阿茲特克體育場',
|
|
}
|
|
|
|
MARKETS = {
|
|
'1x2': '勝平負',
|
|
'h2h': '勝平負',
|
|
'h2h_3_way': '勝平負',
|
|
'asian_handicap': '亞洲讓球',
|
|
'spreads': '讓球盤',
|
|
'alternate_spreads': '讓球變體盤',
|
|
'ou': '大小球',
|
|
'totals': '大小球',
|
|
'alternate_totals': '大小球變體盤',
|
|
'btts': '雙方進球',
|
|
'draw_no_bet': '平手退回',
|
|
'team_total': '球隊大小球',
|
|
'team_totals': '球隊大小球',
|
|
'correct_score': '正確比分',
|
|
}
|
|
|
|
SELECTIONS = {
|
|
'home': '主隊',
|
|
'away': '客隊',
|
|
'draw': '平手',
|
|
'tie': '平手',
|
|
'over': '大分',
|
|
'under': '小分',
|
|
'yes': '是',
|
|
'no': '否',
|
|
}
|
|
|
|
STATUSES = {
|
|
'pre-match': '未開賽',
|
|
'scheduled': '未開賽',
|
|
'upcoming': '未開賽',
|
|
'in-play': '進行中',
|
|
'live': '進行中',
|
|
'finished': '已完賽',
|
|
'final': '已完賽',
|
|
'postponed': '延期',
|
|
'cancelled': '取消',
|
|
'canceled': '取消',
|
|
}
|
|
|
|
|
|
def _clean(value: Any) -> str:
|
|
return str(value or '').strip()
|
|
|
|
|
|
def _lookup(value: Any, mapping: dict[str, str]) -> str:
|
|
text = _clean(value)
|
|
if not text:
|
|
return '待確認'
|
|
return mapping.get(text, mapping.get(text.lower(), text))
|
|
|
|
|
|
def localize_team_name(value: Any) -> str:
|
|
return _lookup(value, TEAM_NAMES)
|
|
|
|
|
|
def localize_country(value: Any) -> str:
|
|
return _lookup(value, COUNTRIES)
|
|
|
|
|
|
def localize_city(value: Any) -> str:
|
|
return _lookup(value, CITIES)
|
|
|
|
|
|
def localize_venue_name(value: Any) -> str:
|
|
return _lookup(value, VENUES)
|
|
|
|
|
|
def localize_market_type(value: Any) -> str:
|
|
return _lookup(value, MARKETS)
|
|
|
|
|
|
def localize_selection(value: Any) -> str:
|
|
text = _clean(value)
|
|
if not text:
|
|
return '待確認'
|
|
lowered = text.lower()
|
|
return SELECTIONS.get(lowered, TEAM_NAMES.get(text, text))
|
|
|
|
|
|
def localize_status(value: Any) -> str:
|
|
text = _clean(value)
|
|
if not text:
|
|
return '待確認'
|
|
return STATUSES.get(text.lower().replace('_', '-'), text)
|