Spaces:
Sleeping
Sleeping
""" | |
国际化工具类,支持中英文切换功能 | |
""" | |
from typing import Dict, Any, Optional | |
from utils.i18n_types import Language | |
from utils.i18n_messages import get_message | |
from utils.i18n_context import I18nContext | |
class I18nUtil: | |
"""国际化工具类""" | |
# 默认语言 | |
DEFAULT_LANGUAGE = Language.ENGLISH | |
# 语言映射 | |
LANGUAGE_MAPPING = { | |
"zh": Language.CHINESE, | |
"zh_cn": Language.CHINESE, | |
"en": Language.ENGLISH, | |
"en_us": Language.ENGLISH, | |
} | |
def parse_language(cls, language_str: Optional[str]) -> Language: | |
""" | |
解析语言字符串 | |
Args: | |
language_str: 语言字符串 | |
Returns: | |
语言枚举值 | |
""" | |
if not language_str: | |
return cls.DEFAULT_LANGUAGE | |
# 标准化语言字符串 | |
normalized = language_str.lower() | |
# 处理连字符和下划线 | |
normalized = normalized.replace("-", "_") | |
return cls.LANGUAGE_MAPPING.get(normalized, cls.DEFAULT_LANGUAGE) | |
def get_error_message(cls, key: str, language: Optional[Language] = None) -> str: | |
""" | |
获取错误消息 | |
Args: | |
key: 错误消息键 | |
language: 语言,如果为None则使用上下文中的语言 | |
Returns: | |
错误消息 | |
""" | |
if language is None: | |
language = I18nContext.get_language() | |
return get_message("error", key, language) | |
def get_success_message(cls, key: str, language: Optional[Language] = None) -> str: | |
""" | |
获取成功消息 | |
Args: | |
key: 成功消息键 | |
language: 语言,如果为None则使用上下文中的语言 | |
Returns: | |
成功消息 | |
""" | |
if language is None: | |
language = I18nContext.get_language() | |
return get_message("success", key, language) | |
def get_status_message(cls, key: str, language: Optional[Language] = None) -> str: | |
""" | |
获取状态消息 | |
Args: | |
key: 状态消息键 | |
language: 语言,如果为None则使用上下文中的语言 | |
Returns: | |
状态消息 | |
""" | |
if language is None: | |
language = I18nContext.get_language() | |
return get_message("status", key, language) | |
def get_label_message(cls, key: str, language: Optional[Language] = None) -> str: | |
""" | |
获取UI标签消息 | |
Args: | |
key: 标签消息键 | |
language: 语言,如果为None则使用上下文中的语言 | |
Returns: | |
标签消息 | |
""" | |
if language is None: | |
language = I18nContext.get_language() | |
return get_message("label", key, language) | |
def get_system_message(cls, key: str, language: Optional[Language] = None) -> str: | |
""" | |
获取系统消息 | |
Args: | |
key: 系统消息键 | |
language: 语言,如果为None则使用上下文中的语言 | |
Returns: | |
系统消息 | |
""" | |
if language is None: | |
language = I18nContext.get_language() | |
return get_message("system", key, language) | |
def get_business_message(cls, key: str, language: Optional[Language] = None) -> str: | |
""" | |
获取业务消息 | |
Args: | |
key: 业务消息键 | |
language: 语言,如果为None则使用上下文中的语言 | |
Returns: | |
业务消息 | |
""" | |
if language is None: | |
language = I18nContext.get_language() | |
return get_message("business", key, language) | |
def create_error_response( | |
cls, | |
error_key: str, | |
language: Optional[Language] = None, | |
details: Optional[str] = None, | |
error_code: int = 400, | |
) -> Dict[str, Any]: | |
""" | |
创建错误响应 | |
Args: | |
error_key: 错误消息键 | |
language: 语言 | |
details: 错误详情 | |
error_code: 错误代码 | |
Returns: | |
错误响应字典 | |
""" | |
if language is None: | |
language = I18nContext.get_language() | |
response = { | |
"success": False, | |
"error": { | |
"code": error_code, | |
"message": cls.get_error_message(error_key, language), | |
"language": language.value, | |
}, | |
} | |
if details: | |
response["error"]["details"] = details | |
return response | |
def create_success_response( | |
cls, | |
data: Any, | |
language: Optional[Language] = None, | |
message_key: str = "search_success", | |
) -> Dict[str, Any]: | |
""" | |
创建成功响应 | |
Args: | |
data: 响应数据 | |
language: 语言 | |
message_key: 成功消息键 | |
Returns: | |
成功响应字典 | |
""" | |
if language is None: | |
language = I18nContext.get_language() | |
return { | |
"success": True, | |
"data": data, | |
"message": cls.get_success_message(message_key, language), | |
"language": language.value, | |
} | |
def create_status_response( | |
cls, | |
status_key: str, | |
language: Optional[Language] = None, | |
data: Optional[Any] = None, | |
) -> Dict[str, Any]: | |
""" | |
创建状态响应 | |
Args: | |
status_key: 状态消息键 | |
language: 语言 | |
data: 响应数据 | |
Returns: | |
状态响应字典 | |
""" | |
if language is None: | |
language = I18nContext.get_language() | |
response = { | |
"status": cls.get_status_message(status_key, language), | |
"language": language.value, | |
} | |
if data is not None: | |
response["data"] = data | |
return response | |
# 便捷函数 | |
def get_language(language_str: Optional[str]) -> Language: | |
"""获取语言枚举值""" | |
return I18nUtil.parse_language(language_str) | |
def get_error_message(key: str, language: Optional[Language] = None) -> str: | |
"""获取错误消息""" | |
return I18nUtil.get_error_message(key, language) | |
def get_success_message(key: str, language: Optional[Language] = None) -> str: | |
"""获取成功消息""" | |
return I18nUtil.get_success_message(key, language) | |
def get_status_message(key: str, language: Optional[Language] = None) -> str: | |
"""获取状态消息""" | |
return I18nUtil.get_status_message(key, language) | |
def get_label_message(key: str, language: Optional[Language] = None) -> str: | |
"""获取UI标签消息""" | |
return I18nUtil.get_label_message(key, language) | |
def get_system_message(key: str, language: Optional[Language] = None) -> str: | |
"""获取系统消息""" | |
return I18nUtil.get_system_message(key, language) | |
def get_business_message(key: str, language: Optional[Language] = None) -> str: | |
"""获取业务消息""" | |
return I18nUtil.get_business_message(key, language) | |
def create_error_response( | |
error_key: str, | |
language: Optional[Language] = None, | |
details: Optional[str] = None, | |
error_code: int = 400, | |
) -> Dict[str, Any]: | |
"""创建错误响应""" | |
return I18nUtil.create_error_response(error_key, language, details, error_code) | |
def create_success_response( | |
data: Any, language: Optional[Language] = None, message_key: str = "search_success" | |
) -> Dict[str, Any]: | |
"""创建成功响应""" | |
return I18nUtil.create_success_response(data, language, message_key) | |
def create_status_response( | |
status_key: str, language: Optional[Language] = None, data: Optional[Any] = None | |
) -> Dict[str, Any]: | |
"""创建状态响应""" | |
return I18nUtil.create_status_response(status_key, language, data) | |