updated docs
This commit is contained in:
70
ApiEvents/LanguageServiceApi/language_service.py
Normal file
70
ApiEvents/LanguageServiceApi/language_service.py
Normal 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")
|
||||
81
ApiEvents/LanguageServiceApi/zod_messages.py
Normal file
81
ApiEvents/LanguageServiceApi/zod_messages.py
Normal 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")
|
||||
Reference in New Issue
Block a user