Files
MemoryBear/api/app/schemas/i18n_schema.py
2026-03-11 10:45:07 +08:00

74 lines
2.9 KiB
Python

"""
I18n Management API Schemas
This module defines Pydantic schemas for i18n management APIs.
"""
from pydantic import BaseModel, Field
from typing import Dict, List, Optional, Any
# ============================================================================
# Language Management Schemas
# ============================================================================
class LanguageInfo(BaseModel):
"""Language information"""
code: str = Field(..., description="Language code (e.g., 'zh', 'en')")
name: str = Field(..., description="Language name (e.g., 'Chinese', 'English')")
native_name: str = Field(..., description="Native language name (e.g., '中文', 'English')")
is_enabled: bool = Field(..., description="Whether the language is enabled")
is_default: bool = Field(..., description="Whether this is the default language")
class LanguageListResponse(BaseModel):
"""Response for language list"""
languages: List[LanguageInfo] = Field(..., description="List of available languages")
class LanguageCreateRequest(BaseModel):
"""Request to add a new language"""
code: str = Field(..., description="Language code (e.g., 'ja', 'ko')", min_length=2, max_length=10)
name: str = Field(..., description="Language name", min_length=1, max_length=100)
native_name: str = Field(..., description="Native language name", min_length=1, max_length=100)
is_enabled: bool = Field(default=True, description="Whether to enable the language")
class LanguageUpdateRequest(BaseModel):
"""Request to update language configuration"""
is_enabled: Optional[bool] = Field(None, description="Whether the language is enabled")
is_default: Optional[bool] = Field(None, description="Whether this is the default language")
# ============================================================================
# Translation Management Schemas
# ============================================================================
class TranslationResponse(BaseModel):
"""Response for translation data"""
translations: Dict[str, Dict[str, Any]] = Field(
...,
description="Translations organized by locale and namespace"
)
class TranslationUpdateRequest(BaseModel):
"""Request to update a translation"""
value: str = Field(..., description="New translation value", min_length=1)
description: Optional[str] = Field(None, description="Optional description of the translation")
class MissingTranslationsResponse(BaseModel):
"""Response for missing translations"""
missing_translations: Dict[str, List[str]] = Field(
...,
description="Missing translation keys organized by locale"
)
class ReloadResponse(BaseModel):
"""Response for translation reload"""
success: bool = Field(..., description="Whether the reload was successful")
reloaded_locales: List[str] = Field(..., description="List of reloaded locales")
total_locales: int = Field(..., description="Total number of available locales")