updated docs

This commit is contained in:
2025-01-22 21:46:11 +03:00
parent 87e5f5ab06
commit 1ba2694a9d
50 changed files with 3342 additions and 401 deletions

View File

@@ -0,0 +1,70 @@
from typing import Dict, List, Optional
from fastapi import APIRouter, Header
from pydantic import BaseModel
class LanguageStrings(BaseModel):
validation: Dict[str, Dict[str, str]] # validation.required.field: {tr: "...", en: "..."}
messages: Dict[str, Dict[str, str]] # messages.welcome: {tr: "...", en: "..."}
labels: Dict[str, Dict[str, str]] # labels.submit_button: {tr: "...", en: "..."}
class LanguageService:
def __init__(self):
self.strings: Dict[str, Dict[str, Dict[str, str]]] = {
"validation": {
"required": {
"tr": "Bu alan zorunludur",
"en": "This field is required"
},
"email": {
"tr": "Geçerli bir e-posta adresi giriniz",
"en": "Please enter a valid email"
},
"min_length": {
"tr": "En az {min} karakter giriniz",
"en": "Enter at least {min} characters"
},
# Add more validation messages
},
"messages": {
"welcome": {
"tr": "Hoş geldiniz",
"en": "Welcome"
},
"success": {
"tr": "İşlem başarılı",
"en": "Operation successful"
},
# Add more messages
},
"labels": {
"submit": {
"tr": "Gönder",
"en": "Submit"
},
"cancel": {
"tr": "İptal",
"en": "Cancel"
},
# Add more labels
}
}
def get_strings(self, lang: str = "tr") -> LanguageStrings:
"""Get all strings for a specific language"""
return LanguageStrings(
validation={k: v[lang] for k, v in self.strings["validation"].items()},
messages={k: v[lang] for k, v in self.strings["messages"].items()},
labels={k: v[lang] for k, v in self.strings["labels"].items()}
)
# Create FastAPI router
router = APIRouter(prefix="/api/language", tags=["Language"])
language_service = LanguageService()
@router.get("/strings")
async def get_language_strings(
accept_language: Optional[str] = Header(default="tr")
) -> LanguageStrings:
"""Get all language strings based on Accept-Language header"""
lang = accept_language.split(",")[0][:2] # Get primary language code
return language_service.get_strings(lang if lang in ["tr", "en"] else "tr")

View File

@@ -0,0 +1,81 @@
from typing import Dict
from fastapi import APIRouter, Header
from pydantic import BaseModel
from typing import Optional
class ZodMessages(BaseModel):
"""Messages that match Zod's error types"""
required_error: str
invalid_type_error: str
invalid_string: Dict[str, str] # email, url, etc
too_small: Dict[str, str] # string, array, number
too_big: Dict[str, str] # string, array, number
custom: Dict[str, str] # custom validation messages
class LanguageService:
def __init__(self):
self.messages = {
"tr": {
"required_error": "Bu alan zorunludur",
"invalid_type_error": "Geçersiz tip",
"invalid_string": {
"email": "Geçerli bir e-posta adresi giriniz",
"url": "Geçerli bir URL giriniz",
"uuid": "Geçerli bir UUID giriniz"
},
"too_small": {
"string": "{min} karakterden az olamaz",
"array": "En az {min} öğe gereklidir",
"number": "En az {min} olmalıdır"
},
"too_big": {
"string": "{max} karakterden fazla olamaz",
"array": "En fazla {max} öğe olabilir",
"number": "En fazla {max} olabilir"
},
"custom": {
"password_match": "Şifreler eşleşmiyor",
"unique_email": "Bu e-posta adresi zaten kullanılıyor",
"strong_password": "Şifre en az bir büyük harf, bir küçük harf ve bir rakam içermelidir"
}
},
"en": {
"required_error": "This field is required",
"invalid_type_error": "Invalid type",
"invalid_string": {
"email": "Please enter a valid email",
"url": "Please enter a valid URL",
"uuid": "Please enter a valid UUID"
},
"too_small": {
"string": "Must be at least {min} characters",
"array": "Must contain at least {min} items",
"number": "Must be at least {min}"
},
"too_big": {
"string": "Must be at most {max} characters",
"array": "Must contain at most {max} items",
"number": "Must be at most {max}"
},
"custom": {
"password_match": "Passwords do not match",
"unique_email": "This email is already in use",
"strong_password": "Password must contain at least one uppercase letter, one lowercase letter, and one number"
}
}
}
def get_messages(self, lang: str = "tr") -> Dict:
"""Get all Zod messages for a specific language"""
return self.messages.get(lang, self.messages["tr"])
router = APIRouter(prefix="/api/language", tags=["Language"])
language_service = LanguageService()
@router.get("/zod-messages")
async def get_zod_messages(
accept_language: Optional[str] = Header(default="tr")
) -> Dict:
"""Get Zod validation messages based on Accept-Language header"""
lang = accept_language.split(",")[0][:2] # Get primary language code
return language_service.get_messages(lang if lang in ["tr", "en"] else "tr")