71 lines
2.6 KiB
Python
71 lines
2.6 KiB
Python
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")
|