jackkuo's picture
add QA
79899c0
"""
国际化工具类,支持中英文切换功能
"""
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,
}
@classmethod
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)
@classmethod
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)
@classmethod
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)
@classmethod
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)
@classmethod
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)
@classmethod
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)
@classmethod
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)
@classmethod
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
@classmethod
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,
}
@classmethod
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)