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) | |